PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgo8aHRtbD48aGVhZD48dGl0bGU+QysrIFN0YW5kYXJkIExpYnJhcnkgQ2xvc2VkIElzc3VlcyBMaXN0PC90aXRsZT4KCjxzdHlsZT5pbnMge2JhY2tncm91bmQtY29sb3I6I0ZGRkZBMH0KZGVsIHtiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGQTB9PC9zdHlsZT48L2hlYWQ+Cgo8Ym9keSBiZ2NvbG9yPSIjZmZmZmZmIiB0ZXh0PSIjMDAwMDAwIj4KPHRhYmxlPgo8dGJvZHk+PHRyPgo8dGQgYWxpZ249ImxlZnQiPkRvYy4gbm8uPC90ZD4KPHRkIGFsaWduPSJsZWZ0Ij5OMjEzMj0wNi0wMjAyPC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImxlZnQiPkRhdGU6PC90ZD4KPHRkIGFsaWduPSJsZWZ0Ij4yMDA2LTExLTAzPC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImxlZnQiPlByb2plY3Q6PC90ZD4KPHRkIGFsaWduPSJsZWZ0Ij5Qcm9ncmFtbWluZyBMYW5ndWFnZSBDKys8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBhbGlnbj0ibGVmdCI+UmVwbHkgdG86PC90ZD4KPHRkIGFsaWduPSJsZWZ0Ij5Ib3dhcmQgSGlubmFudCAmbHQ7aG93YXJkLmhpbm5hbnRAZ21haWwuY29tJmd0OzwvdGQ+CjwvdHI+CjwvdGJvZHk+PC90YWJsZT4KPGgxPkMrKyBTdGFuZGFyZCBMaWJyYXJ5IENsb3NlZCBJc3N1ZXMgTGlzdCAoUmV2aXNpb24gUjQ1KTwvaDE+CiAgPHA+UmVmZXJlbmNlIElTTy9JRUMgSVMgMTQ4ODI6MTk5OChFKTwvcD4KICA8cD5BbHNvIHNlZTo8L3A+CiAgICA8dWw+CiAgICAgIDxsaT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctdG9jLmh0bWwiPlRhYmxlIG9mIENvbnRlbnRzPC9hPiBmb3IgYWxsIGxpYnJhcnkgaXNzdWVzLjwvbGk+CiAgICAgIDxsaT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCI+SW5kZXggYnkgU2VjdGlvbjwvYT4gZm9yIGFsbCBsaWJyYXJ5IGlzc3Vlcy48L2xpPgogICAgICA8bGk+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sIj5JbmRleCBieSBTdGF0dXM8L2E+IGZvciBhbGwgbGlicmFyeSBpc3N1ZXMuPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIj5MaWJyYXJ5IEFjdGl2ZSBJc3N1ZXMgTGlzdDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIj5MaWJyYXJ5IERlZmVjdCBSZXBvcnRzIExpc3Q8L2E+PC9saT4KICAgIDwvdWw+CgogIDxwPlRoaXMgZG9jdW1lbnQgY29udGFpbnMgb25seSBsaWJyYXJ5IGlzc3VlcyB3aGljaCBoYXZlIGJlZW4gY2xvc2VkCiAgYnkgdGhlIExpYnJhcnkgV29ya2luZyBHcm91cCBhcyBkdXBsaWNhdGVzIG9yIG5vdCBkZWZlY3RzLiBUaGF0IGlzLAogIGlzc3VlcyB3aGljaCBoYXZlIGEgc3RhdHVzIG9mIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0R1cCI+RHVwPC9hPiBvciA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4uIFNlZSB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwiPkxpYnJhcnkgQWN0aXZlIElzc3VlcyBMaXN0PC9hPiBhY3RpdmUgaXNzdWVzIGFuZCBtb3JlCiAgaW5mb3JtYXRpb24uIFNlZSB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIj5MaWJyYXJ5IERlZmVjdCBSZXBvcnRzIExpc3Q8L2E+IGZvciBpc3N1ZXMgY29uc2lkZXJlZAogIGRlZmVjdHMuICBUaGUgaW50cm9kdWN0b3J5IG1hdGVyaWFsIGluIHRoYXQgZG9jdW1lbnQgYWxzbyBhcHBsaWVzIHRvCiAgdGhpcyBkb2N1bWVudC48L3A+CjxoMj5SZXZpc2lvbiBIaXN0b3J5PC9oMj4KPHVsPgo8bGk+UjQ1OiAKMjAwNi0xMS0wMyBwb3N0LVBvcnRsYW5kIG1haWxpbmcuCk1vdmVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTIwIj41MjA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTIxIj41MjE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTMwIj41MzA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTM1Ij41MzU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTM3Ij41Mzc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTM4Ij41Mzg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTQwIj41NDA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTQxIj41NDE8L2E+IHRvIFdQLgpNb3ZlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTA0Ij41MDQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MTIiPjUxMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUxNiI+NTE2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTQ0Ij41NDQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NDkiPjU0OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU1NCI+NTU0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTU1Ij41NTU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NTgiPjU1ODwvYT4gdG8gTkFELgpNb3ZlZCBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NjkiPjU2OTwvYT4gdG8gRHVwLgpNb3ZlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTE4Ij41MTg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MjMiPjUyMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUyNCI+NTI0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTQyIj41NDI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1NTYiPjU1NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzU1NyI+NTU3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTU5Ij41NTk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1OTciPjU5NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzYwNiI+NjA2PC9hPiB0byBPcGVuLgpNb3ZlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTQzIj41NDM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1NDUiPjU0NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU0OSI+NTQ5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTQ5Ij41NDk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1OTgiPjU5ODwvYT4gLSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2MDMiPjYwMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzYwNSI+NjA1PC9hPiB0byBSZWFkeS4KTW92ZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUzMSI+NTMxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTUxIj41NTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2MDQiPjYwNDwvYT4gdG8gUmV2aWV3LgpBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzU5MyI+NTkzPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2MDkiPjYwOTwvYT4uCjwvbGk+CjxsaT5SNDQ6IAoyMDA2LTA5LTA4IHByZS1Qb3J0bGFuZCBtYWlsaW5nLgpBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzU4MyI+NTgzPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1OTIiPjU5MjwvYT4uCjwvbGk+CjxsaT5SNDM6IAoyMDA2LTA2LTIzIG1pZC10ZXJtIG1haWxpbmcuCkFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTc1Ij41NzU8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzU4MiI+NTgyPC9hPi4KUmVvcGVuZWQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMjU1Ij4yNTU8L2E+LgpNb3ZlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUyMCI+NTIwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzU0MSI+NTQxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTQ0Ij41NDQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NjkiPjU2OTwvYT4gdG8gVGVudGF0aXZlbHkgUmVhZHkuCjwvbGk+CjxsaT5SNDI6IAoyMDA2LTA0LTIxIHBvc3QtQmVybGluIG1haWxpbmcuCkFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTY3Ij41Njc8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzU3MiI+NTcyPC9hPi4KTW92ZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzQ5OSI+NDk5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTAxIj41MDE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MDYiPjUwNjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUwOSI+NTA5PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MTEiPjUxMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUxMyI+NTEzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTE0Ij41MTQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MTciPjUxNzwvYT4gdG8gTkFELgpNb3ZlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTAyIj41MDI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MDMiPjUwMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUxNSI+NTE1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTE2Ij41MTY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MjIiPjUyMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUyNSI+NTI1PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MjkiPjUyOTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUzMiI+NTMyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTM2Ij41MzY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MzkiPjUzOTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzU0OCI+NTQ4PC9hPiB0byBPcGVuLgpNb3ZlZCBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MDQiPjUwNDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUxMiI+NTEyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUyMSI+NTIxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUzMCI+NTMwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTMxIj41MzE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTM1Ij41MzU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTM3Ij41Mzc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTM4Ij41Mzg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTQwIj41NDA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NDkiPjU0OTwvYT4gdG8gUmVhZHkuCk1vdmVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjQ3Ij4yNDc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjk0Ij4yOTQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzYyIj4zNjI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzY5Ij4zNjk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzcxIj4zNzE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzc2Ij4zNzY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzg0Ij4zODQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDc1Ij40NzU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDc4Ij40Nzg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDk1Ij40OTU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDk3Ij40OTc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTA1Ij41MDU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTA3Ij41MDc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTA4Ij41MDg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTE5Ij41MTk8L2E+IHRvIFdQLgpNb3ZlZCBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MzQiPjUzNDwvYT4gdG8gUmV2aWV3Lgo8L2xpPgo8bGk+UjQxOiAKMjAwNi0wMi0yNCBwcmUtQmVybGluIG1haWxpbmcuCkFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTM2Ij41MzY8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzU2NiI+NTY2PC9hPi4KTW92ZWQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMzQyIj4zNDI8L2E+IGZyb20gUmVhZHkgdG8gT3Blbi4KUmVvcGVuZWQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMzA5Ij4zMDk8L2E+Lgo8L2xpPgo8bGk+UjQwOiAKMjAwNS0xMi0xNiBtaWQtdGVybSBtYWlsaW5nLgpBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUyOSI+NTI5PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTM1Ij41MzU8L2E+Lgo8L2xpPgo8bGk+UjM5OiAKMjAwNS0xMC0xNCBwb3N0LU1vbnQgVHJlbWJsYW50IG1haWxpbmcuCkFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTI2Ij41MjY8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUyOCI+NTI4PC9hPi4KTW92ZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyODAiPjI4MDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0NjEiPjQ2MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0NjQiPjQ2NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0NjUiPjQ2NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0NjciPjQ2NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0NjgiPjQ2ODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0NzQiPjQ3NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0OTYiPjQ5NjwvYT4gZnJvbSBSZWFkeSB0byBXUCBhcyBwZXIgdGhlIHZvdGUgZnJvbSBNb250IFRyZW1ibGFudC4KTW92ZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNDciPjI0NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyOTQiPjI5NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzM0MiI+MzQyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM2MiI+MzYyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM2OSI+MzY5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM3MSI+MzcxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM3NiI+Mzc2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM4NCI+Mzg0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQ3NSI+NDc1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQ3OCI+NDc4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQ5NSI+NDk1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQ5NyI+NDk3PC9hPiBmcm9tIFJldmlldyB0byBSZWFkeS4KTW92ZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzQ5OCI+NDk4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTA0Ij41MDQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MDYiPjUwNjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUwOSI+NTA5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTEwIj41MTA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MTEiPjUxMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUxMiI+NTEyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTEzIj41MTM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MTQiPjUxNDwvYT4gZnJvbSBOZXcgdG8gT3Blbi4KTW92ZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1MDUiPjUwNTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1MDciPjUwNzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1MDgiPjUwODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1MTkiPjUxOTwvYT4gZnJvbSBOZXcgdG8gUmVhZHkuCk1vdmVkIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUwMCI+NTAwPC9hPiBmcm9tIE5ldyB0byBOQUQuCk1vdmVkIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUxOCI+NTE4PC9hPiBmcm9tIE5ldyB0byBSZXZpZXcuCjwvbGk+CjxsaT5SMzg6IAoyMDA1LTA3LTAzIHByZS1Nb250IFRyZW1ibGFudCBtYWlsaW5nLgpNZXJnZWQgb3BlbiBUUjEgaXNzdWVzIGluIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUwNCI+NTA0PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MjIiPjUyMjwvYT4uCkFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTIzIj41MjM8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUyMyI+NTIzPC9hPgo8L2xpPgo8bGk+UjM3OiAKMjAwNS0wNiBtaWQtdGVybSBtYWlsaW5nLgpBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzQ5OCI+NDk4PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MDMiPjUwMzwvYT4uCjwvbGk+CjxsaT5SMzY6IAoyMDA1LTA0IHBvc3QtTGlsbGVoYW1tZXIgbWFpbGluZy4gQWxsIGlzc3VlcyBpbiAicmVhZHkiIHN0YXR1cyBleGNlcHQKZm9yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzQ1NCI+NDU0PC9hPiB3ZXJlIG1vdmVkIHRvICJEUiIgc3RhdHVzLCBhbmQgYWxsIGlzc3VlcwpwcmV2aW91c2x5IGluICJEUiIgc3RhdHVzIHdlcmUgbW92ZWQgdG8gIldQIi4KPC9saT4KPGxpPlIzNTogCjIwMDUtMDMgcHJlLUxpbGxlaGFtbWVyIG1haWxpbmcuCjwvbGk+CjxsaT5SMzQ6IAoyMDA1LTAxIG1pZC10ZXJtIG1haWxpbmcuICBBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzQ4OCI+NDg4PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM0OTQiPjQ5NDwvYT4uCjwvbGk+CjxsaT5SMzM6IAoyMDA0LTExIHBvc3QtUmVkbW9uZCBtYWlsaW5nLiBSZWZsZWN0cyBhY3Rpb25zIHRha2VuIGluIFJlZG1vbmQuCjwvbGk+CjxsaT5SMzI6IAoyMDA0LTA5IHByZS1SZWRtb25kIG1haWxpbmc6IHJlZmxlY3RzIG5ldyBwcm9wb3NlZCByZXNvbHV0aW9ucyBhbmQKbmV3IGlzc3VlcyByZWNlaXZlZCBhZnRlciB0aGUgMjAwNC0wNyBtYWlsaW5nLiAgQWRkZWQKbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM0NzkiPjQ3OTwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNDgxIj40ODE8L2E+Lgo8L2xpPgo8bGk+UjMxOiAKMjAwNC0wNyBtaWQtdGVybSBtYWlsaW5nOiByZWZsZWN0cyBuZXcgcHJvcG9zZWQgcmVzb2x1dGlvbnMgYW5kCm5ldyBpc3N1ZXMgcmVjZWl2ZWQgYWZ0ZXIgdGhlIHBvc3QtU3lkbmV5IG1haWxpbmcuICBBZGRlZApuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzQ2MyI+NDYzPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDc4Ij40Nzg8L2E+Lgo8L2xpPgo8bGk+UjMwOiAKUG9zdC1TeWRuZXkgbWFpbGluZzogcmVmbGVjdHMgZGVjaXNpb25zIG1hZGUgYXQgdGhlIFN5ZG5leSBtZWV0aW5nLgpWb3RlZCBhbGwgIlJlYWR5IiBpc3N1ZXMgZnJvbSBSMjkgaW50byB0aGUgd29ya2luZyBwYXBlci4KQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDYwIj40NjA8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzQ2MiI+NDYyPC9hPi4KPC9saT4KPGxpPlIyOTogClByZS1TeWRuZXkgbWFpbGluZy4gIEFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQ0MSI+NDQxPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDU3Ij40NTc8L2E+Lgo8L2xpPgo8bGk+UjI4OiAKUG9zdC1Lb25hIG1haWxpbmc6IHJlZmxlY3RzIGRlY2lzaW9ucyBtYWRlIGF0IHRoZSBLb25hIG1lZXRpbmcuCkFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQzMiI+NDMyPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM0NDAiPjQ0MDwvYT4uCjwvbGk+CjxsaT5SMjc6IApQcmUtS29uYSBtYWlsaW5nLiAgQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDA0Ij40MDQ8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzQzMSI+NDMxPC9hPi4KPC9saT4KPGxpPlIyNjogClBvc3QtT3hmb3JkIG1haWxpbmc6IHJlZmxlY3RzIGRlY2lzaW9ucyBtYWRlIGF0IHRoZSBPeGZvcmQgbWVldGluZy4KQWxsIGlzc3VlcyBpbiBSZWFkeSBzdGF0dXMgd2VyZSB2b3RlZCBpbnRvIERSIHN0YXR1cy4gIEFsbCBpc3N1ZXMgaW4KRFIgc3RhdHVzIHdlcmUgdm90ZWQgaW50byBXUCBzdGF0dXMuCjwvbGk+CjxsaT5SMjU6IApQcmUtT3hmb3JkIG1haWxpbmcuICBBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzM5MCI+MzkwPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDAyIj40MDI8L2E+Lgo8L2xpPgo8bGk+UjI0OiAKUG9zdC1TYW50YSBDcnV6IG1haWxpbmc6IHJlZmxlY3RzIGRlY2lzaW9ucyBtYWRlIGF0IHRoZSBTYW50YSBDcnV6Cm1lZXRpbmcuICBBbGwgUmVhZHkgaXNzdWVzIGZyb20gUjIzIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjUzIj4yNTM8L2E+LCB3aGljaCBoYXMgYmVlbiBnaXZlbiBhIG5ldyBwcm9wb3NlZCByZXNvbHV0aW9uLCB3ZXJlCm1vdmVkIHRvIERSIHN0YXR1cy4gIEFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM4MyI+MzgzPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzg5Ij4zODk8L2E+LiAgKElzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMzODciPjM4NzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM4OSI+Mzg5PC9hPiB3ZXJlIGRpc2N1c3NlZAphdCB0aGUgbWVldGluZy4pICBNYWRlIHByb2dyZXNzIG9uIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI1Ij4yMjU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI2Ij4yMjY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI5Ij4yMjk8L2E+OiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI1Ij4yMjU8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI5Ij4yMjk8L2E+IGhhdmUgYmVlbiBtb3ZlZCB0byBSZWFkeSBzdGF0dXMsIGFuZCB0aGUgb25seSByZW1haW5pbmcKY29uY2VybnMgd2l0aCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI2Ij4yMjY8L2E+IGludm9sdmUgd29yZGluZy4KPC9saT4KPGxpPlIyMzogClByZS1TYW50YSBDcnV6IG1haWxpbmcuICBBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzM2NyI+MzY3PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMzODIiPjM4MjwvYT4uCk1vdmVkIGlzc3VlcyBpbiB0aGUgVEMgdG8gVEMgc3RhdHVzLgo8L2xpPgo8bGk+UjIyOiAKUG9zdC1DdXJh52FvIG1haWxpbmcuICBBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzNjIiPjM2MjwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzY2Ij4zNjY8L2E+Lgo8L2xpPgo8bGk+UjIxOiAKUHJlLUN1cmHnYW8gbWFpbGluZy4gIEFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzUxIj4zNTE8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzM2MSI+MzYxPC9hPi4KPC9saT4KPGxpPlIyMDogClBvc3QtUmVkbW9uZCBtYWlsaW5nOyByZWZsZWN0cyBhY3Rpb25zIHRha2VuIGluIFJlZG1vbmQuICBBZGRlZApuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMzYiPjMzNjwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzUwIj4zNTA8L2E+LCBvZiB3aGljaCBpc3N1ZXMgCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzNDciPjM0NzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzUwIj4zNTA8L2E+IHdlcmUgYWRkZWQgc2luY2UgUmVkbW9uZCwgaGVuY2UKbm90IGRpc2N1c3NlZCBhdCB0aGUgbWVldGluZy4gIAoKQWxsIFJlYWR5IGlzc3VlcyB3ZXJlIG1vdmVkIHRvIERSIHN0YXR1cywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGlzc3Vlcwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjg0Ij4yODQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjQxIj4yNDE8L2E+LCBhbmQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjY3Ij4yNjc8L2E+LgoKTm90ZXdvcnRoeSBpc3N1ZXMgZGlzY3Vzc2VkIGF0IFJlZG1vbmQgaW5jbHVkZSAKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEyMCI+MTIwPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjAyIj4yMDI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI2Ij4yMjY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMyMzMiPjIzMzwvYT4sIAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjcwIj4yNzA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjUzIj4yNTM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMyNTQiPjI1NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzMyMyI+MzIzPC9hPi4KPC9saT4KPGxpPlIxOTogClByZS1SZWRtb25kIG1haWxpbmcuICBBZGRlZCBuZXcgaXNzdWVzIAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzMjMiPjMyMzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMzNSI+MzM1PC9hPi4KPC9saT4KPGxpPlIxODogClBvc3QtQ29wZW5oYWdlbiBtYWlsaW5nOyByZWZsZWN0cyBhY3Rpb25zIHRha2VuIGluIENvcGVuaGFnZW4uCkFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMxMiI+MzEyPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzE3Ij4zMTc8L2E+LCBhbmQgZGlzY3Vzc2VkCm5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI3MSI+MjcxPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzMTQiPjMxNDwvYT4uCgpDaGFuZ2VkIHN0YXR1cyBvZiBpc3N1ZXMKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEwMyI+MTAzPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTE4Ij4xMTg8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMzYiPjEzNjwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE1MyI+MTUzPC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTY1Ij4xNjU8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNzEiPjE3MTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE4MyI+MTgzPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTg0Ij4xODQ8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxODUiPjE4NTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE4NiI+MTg2PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjE0Ij4yMTQ8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjEiPjIyMTwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIzNCI+MjM0PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjM3Ij4yMzc8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNDMiPjI0MzwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI0OCI+MjQ4PC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjUxIj4yNTE8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNTIiPjI1MjwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1NiI+MjU2PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjYwIj4yNjA8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNjEiPjI2MTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI2MiI+MjYyPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjYzIj4yNjM8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNjUiPjI2NTwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI2OCI+MjY4PC9hPgp0byBEUi4KCkNoYW5nZWQgc3RhdHVzIG9mIGlzc3Vlcwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDkiPjQ5PC9hPiAgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEwOSI+MTA5PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTE3Ij4xMTc8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxODIiPjE4MjwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyOCI+MjI4PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjMwIj4yMzA8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMzIiPjIzMjwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIzNSI+MjM1PC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjM4Ij4yMzg8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNDEiPjI0MTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI0MiI+MjQyPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjUwIj4yNTA8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNTkiPjI1OTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI2NCI+MjY0PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjY2Ij4yNjY8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzI2NyI+MjY3PC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjcxIj4yNzE8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNzIiPjI3MjwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI3MyI+MjczPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjc1Ij4yNzU8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyODEiPjI4MTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI4NCI+Mjg0PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjg1Ij4yODU8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyODYiPjI4NjwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI4OCI+Mjg4PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjkyIj4yOTI8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyOTUiPjI5NTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI5NyI+Mjk3PC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjk4Ij4yOTg8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMDEiPjMwMTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMwMyI+MzAzPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzA2Ij4zMDY8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMDciPjMwNzwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMwOCI+MzA4PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzEyIj4zMTI8L2E+CnRvIFJlYWR5LgoKQ2xvc2VkIGlzc3VlcyAKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTExIj4xMTE8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzI3NyI+Mjc3PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyNzkiPjI3OTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjg3Ij4yODc8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzI4OSI+Mjg5PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyOTMiPjI5MzwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzAyIj4zMDI8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzMxMyI+MzEzPC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzMTQiPjMxNDwvYT4KYXMgTkFELgoKPC9saT4KPGxpPlIxNzogClByZS1Db3BlbmhhZ2VuIG1haWxpbmcuICBDb252ZXJ0ZWQgaXNzdWVzIGxpc3QgdG8gWE1MLiAgQWRkZWQgcHJvcG9zZWQKcmVzb2x1dGlvbnMgZm9yIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDkiPjQ5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc2Ij43NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM5MSI+OTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjM1Ij4yMzU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjUwIj4yNTA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyNjciPjI2NzwvYT4uCkFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI3OCI+Mjc4PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzExIj4zMTE8L2E+Lgo8L2xpPgo8bGk+UjE2OiAgCnBvc3QtVG9yb250byBtYWlsaW5nOyByZWZsZWN0cyBhY3Rpb25zIHRha2VuIGluIFRvcm9udG8uIEFkZGVkIG5ldwppc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI2NSI+MjY1PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyNzciPjI3NzwvYT4uICBDaGFuZ2VkIHN0YXR1cyBvZiBpc3N1ZXMKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMiPjM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjOCI+ODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM5Ij45PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE5Ij4xOTwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNiI+MjY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzEiPjMxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYxIj42MTwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MyI+NjM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjODYiPjg2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEwOCI+MTA4PC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzExMiI+MTEyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzExNCI+MTE0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzExNSI+MTE1PC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEyMiI+MTIyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEyNyI+MTI3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEyOSI+MTI5PC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEzNCI+MTM0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEzNyI+MTM3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE0MiI+MTQyPC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE0NCI+MTQ0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE0NiI+MTQ2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE0NyI+MTQ3PC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE1OSI+MTU5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE2NCI+MTY0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE3MCI+MTcwPC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE4MSI+MTgxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE5OSI+MTk5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIwOCI+MjA4PC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIwOSI+MjA5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIxMCI+MjEwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIxMSI+MjExPC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIxMiI+MjEyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIxNyI+MjE3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyMCI+MjIwPC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyMiI+MjIyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyMyI+MjIzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNCI+MjI0PC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNyI+MjI3PC9hPiB0byAiRFIiLiAgUmVvcGVuZWQgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMjMiPjIzPC9hPi4gUmVvcGVuZWQKaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE4NyI+MTg3PC9hPi4gQ2hhbmdlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMiI+MjwvYT4gYW5kCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzQiPjQ8L2E+IHRvIE5BRC4gRml4ZWQgYSB0eXBvIGluIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNyI+MTc8L2E+LiBGaXhlZAppc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNzAiPjcwPC9hPjogc2lnbmF0dXJlIHNob3VsZCBiZSBjaGFuZ2VkIGJvdGggcGxhY2VzIGl0CmFwcGVhcnMuIEZpeGVkIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNjAiPjE2MDwvYT46IHByZXZpb3VzIHZlcnNpb24gZGlkbid0IGZpeAp0aGUgYnVnIGluIGVub3VnaCBwbGFjZXMuCjwvbGk+CjxsaT5SMTU6IApwcmUtVG9yb250byBtYWlsaW5nLiBBZGRlZCBpc3N1ZXMKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMjMzIj4yMzM8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNjQiPjI2NDwvYT4uIFNvbWUgc21hbGwgSFRNTCBmb3JtYXR0aW5nCmNoYW5nZXMgc28gdGhhdCB3ZSBwYXNzIFdlYmxpbnQgdGVzdHMuCjwvbGk+CjxsaT5SMTQ6IApwb3N0LVRva3lvIElJIG1haWxpbmc7IHJlZmxlY3RzIGNvbW1pdHRlZSBhY3Rpb25zIHRha2VuIGluClRva3lvLiBBZGRlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyOCI+MjI4PC9hPiB0byA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjMyIj4yMzI8L2E+LiAoMDAtMDAxOVIxL04xMjQyKQo8L2xpPgo8bGk+UjEzOiAKcHJlLVRva3lvIElJIHVwZGF0ZWQ6IEFkZGVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjEyIj4yMTI8L2E+IHRvIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjciPjIyNzwvYT4uCjwvbGk+CjxsaT5SMTI6IApwcmUtVG9reW8gSUkgbWFpbGluZzogQWRkZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxOTkiPjE5OTwvYT4gdG8KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIxMSI+MjExPC9hPi4gQWRkZWQgImFuZCBwYXJhZ3JhcGggNSIgdG8gdGhlIHByb3Bvc2VkIHJlc29sdXRpb24Kb2YgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI5Ij4yOTwvYT4uICBBZGQgZnVydGhlciByYXRpb25hbGUgdG8gaXNzdWUKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTc4Ij4xNzg8L2E+Lgo8L2xpPgo8bGk+UjExOiAKcG9zdC1Lb25hIG1haWxpbmc6IFVwZGF0ZWQgdG8gcmVmbGVjdCBMV0cgYW5kIGZ1bGwgY29tbWl0dGVlIGFjdGlvbnMKaW4gS29uYSAoOTktMDA0OC9OMTIyNCkuIE5vdGUgY2hhbmdlZCByZXNvbHV0aW9uIG9mIGlzc3Vlcwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM0Ij40PC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM4Ij4zODwvYT4uIEFkZGVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxOTYiPjE5NjwvYT4KdG8gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE5OCI+MTk4PC9hPi4gQ2xvc2VkIGlzc3VlcyBsaXN0IHNwbGl0IGludG8gImRlZmVjdHMiIGFuZAoiY2xvc2VkIiBkb2N1bWVudHMuICBDaGFuZ2VkIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIG9mIGlzc3VlCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzQiPjQ8L2E+IHRvIE5BRCwgYW5kIGNoYW5nZWQgdGhlIHdvcmRpbmcgb2YgcHJvcG9zZWQgcmVzb2x1dGlvbgpvZiBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzgiPjM4PC9hPi4KPC9saT4KPGxpPlIxMDogCnByZS1Lb25hIHVwZGF0ZWQuICBBZGRlZCBwcm9wb3NlZCByZXNvbHV0aW9ucyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjODMiPjgzPC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzg2Ij44NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM5MSI+OTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjOTIiPjkyPC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEwOSI+MTA5PC9hPi4gQWRkZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzE5MCI+MTkwPC9hPiB0bwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTk1Ij4xOTU8L2E+LiAoOTktMDAzMy9EMTIwOSwgMTQgT2N0IDk5KQo8L2xpPgo8bGk+Ujk6IApwcmUtS29uYSBtYWlsaW5nLiAgQWRkZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzE0MCI+MTQwPC9hPiB0bwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTg5Ij4xODk8L2E+LiBJc3N1ZXMgbGlzdCBzcGxpdCBpbnRvIHNlcGFyYXRlICJhY3RpdmUiIGFuZAoiY2xvc2VkIiBkb2N1bWVudHMuICg5OS0wMDMwL04xMjA2LCAyNSBBdWcgOTkpCjwvbGk+CjxsaT5SODogCnBvc3QtRHVibGluIG1haWxpbmcuIFVwZGF0ZWQgdG8gcmVmbGVjdCBMV0cgYW5kIGZ1bGwgY29tbWl0dGVlIGFjdGlvbnMKaW4gRHVibGluLiAoOTktMDAxNi9OMTE5MywgMjEgQXByIDk5KQo8L2xpPgo8bGk+Ujc6IApwcmUtRHVibGluIHVwZGF0ZWQ6IEFkZGVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTMwIj4xMzA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxMzEiPjEzMTwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMzIiPjEzMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMzMiPjEzMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMzQiPjEzNDwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzEzNSI+MTM1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEzNiI+MTM2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEzNyI+MTM3PC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTM4Ij4xMzg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTM5Ij4xMzk8L2E+ICgzMSBNYXIgOTkpCjwvbGk+CjxsaT5SNjogCnByZS1EdWJsaW4gbWFpbGluZy4gQWRkZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMjciPjEyNzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzEyOCI+MTI4PC9hPiwKYW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMjkiPjEyOTwvYT4uICAoOTktMDAwNy9OMTE5NCwgMjIgRmViIDk5KQo8L2xpPgo8bGk+UjU6IAp1cGRhdGUgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMDMiPjEwMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMTIiPjExMjwvYT47IGFkZGVkIGlzc3Vlcwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTE0Ij4xMTQ8L2E+IHRvIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMjYiPjEyNjwvYT4uIEZvcm1hdCByZXZpc2lvbnMgdG8gcHJlcGFyZQpmb3IgbWFraW5nIGxpc3QgcHVibGljLiAoMzAgRGVjIDk4KQo8L2xpPgo8bGk+UjQ6IApwb3N0LVNhbnRhIENydXogSUkgdXBkYXRlZDogSXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMTAiPjExMDwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzExMSI+MTExPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzExMiI+MTEyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTEzIj4xMTM8L2E+IGFkZGVkLCBzZXZlcmFsCmlzc3VlcyBjb3JyZWN0ZWQuICgyMiBPY3QgOTgpCjwvbGk+CjxsaT5SMzogCnBvc3QtU2FudGEgQ3J1eiBJSTogSXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzk0Ij45NDwvYT4gdG8gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEwOSI+MTA5PC9hPgphZGRlZCwgbWFueSBpc3N1ZXMgdXBkYXRlZCB0byByZWZsZWN0IExXRyBjb25zZW5zdXMgKDEyIE9jdCA5OCkKPC9saT4KPGxpPlIyOiAKcHJlLVNhbnRhIENydXogSUk6IElzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3MyI+NzM8L2E+IHRvIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzkzIj45MzwvYT4gYWRkZWQsCmlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNyI+MTc8L2E+IHVwZGF0ZWQuICgyOSBTZXAgOTgpCjwvbGk+CjxsaT5SMTogCkNvcnJlY3Rpb24gdG8gaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzU1Ij41NTwvYT4gcmVzb2x1dGlvbiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYwIj42MDwvYT4gY29kZQpmb3JtYXQsIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NCI+NjQ8L2E+IHRpdGxlLiAoMTcgU2VwIDk4KQo8L2xpPgo8L3VsPgo8aDI+Q2xvc2VkIElzc3VlczwvaDI+Cjxocj4KPGEgbmFtZT0iMiI+PGgzPjIuJm5ic3A7QXV0b19wdHIgY29udmVyc2lvbnMgZWZmZWN0cyBpbmNvcnJlY3Q8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMC40LjUuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIubWV0YS51bmFyeS5wcm9wIj4gW2xpYi5tZXRhLnVuYXJ5LnByb3BdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs0IERlYyAxOTk3PC9wPgo8cD5QYXJhZ3JhcGggMSBpbiAiRWZmZWN0cyIsIHNheXMgIkNhbGxzCnAtJmd0O3JlbGVhc2UoKSIgd2hlcmUgaXQgY2xlYXJseSBtdXN0IGJlICJDYWxscwpwLnJlbGVhc2UoKSIuIChBcyBpdCBpcywgaXQgc2VlbXMgdG8gcmVxdWlyZSB1c2luZwphdXRvX3B0ciZsdDsmZ3Q7OjpvcGVyYXRvci0mZ3Q7IHRvIHJlZmVyIHRvIFg6OnJlbGVhc2UsIGFzc3VtaW5nIHRoYXQKZXhpc3RzLik8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDIwLjQuNS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5tZXRhLnVuYXJ5LnByb3AiPiBbbGliLm1ldGEudW5hcnkucHJvcF08L2E+IHBhcmFncmFwaCAxIEVmZmVjdHMgZnJvbSAKIkNhbGxzIHAtJmd0O3JlbGVhc2UoKSIgdG8gIkNhbGxzIHAucmVsZWFzZSgpIi48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5Ob3QgYSBkZWZlY3Q6IHRoZSBwcm9wb3NlZCBjaGFuZ2UgaXMgYWxyZWFkeSBmb3VuZCBpbiB0aGUgc3RhbmRhcmQuCltPcmlnaW5hbGx5IGNsYXNzaWZpZWQgYXMgYSBkZWZlY3QsIGxhdGVyIHJlY2xhc3NpZmllZC5dPC9wPgo8aHI+CjxhIG5hbWU9IjQiPjxoMz40LiZuYnNwO0Jhc2ljX3N0cmluZyBzaXplX3R5cGUgYW5kIGRpZmZlcmVuY2VfdHlwZSBzaG91bGQgYmUgaW1wbGVtZW50YXRpb24gZGVmaW5lZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIxLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5iYXNpYy5zdHJpbmciPiBbbGliLmJhc2ljLnN0cmluZ108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QmVtYW4gRGF3ZXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTYgTm92IDE5OTc8L3A+CjxwPkluIE1vcnJpc3Rvd24gd2UgY2hhbmdlZCB0aGUgc2l6ZV90eXBlIGFuZCBkaWZmZXJlbmNlX3R5cGUgdHlwZWRlZnMKZm9yIGFsbCB0aGUgb3RoZXIgY29udGFpbmVycyB0byBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHdpdGggYQpyZWZlcmVuY2UgdG8gMjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMiPiBbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdPC9hPi4gIFRoaXMgc2hvdWxkIHByb2JhYmx5IGFsc28gaGF2ZSBiZWVuCmRvbmUgZm9yIHN0cmluZ3MuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+Tm90IGEgZGVmZWN0LiAgW09yaWdpbmFsbHkgY2xhc3NpZmllZCBhcyBhIGRlZmVjdCwgbGF0ZXIKcmVjbGFzc2lmaWVkLl0gIGJhc2ljX3N0cmluZywgdW5saWtlIHRoZSBvdGhlciBzdGFuZGFyZCBsaWJyYXJ5CnRlbXBsYXRlIGNvbnRhaW5lcnMsIGlzIHNldmVyZWx5IGNvbnN0cmFpbmVkIGJ5IGl0cyB1c2Ugb2YKY2hhcl90cmFpdHMuIFRob3NlIHR5cGVzIGFyZSBkaWN0YXRlZCBieSB0aGUgdHJhaXRzIGNsYXNzLCBhbmQgYXJlIGZhcgpmcm9tIGltcGxlbWVudGF0aW9uIGRlZmluZWQuPC9wPgo8aHI+CjxhIG5hbWU9IjYiPjxoMz42LiZuYnNwO0ZpbGUgcG9zaXRpb24gbm90IGFuIG9mZnNldCB1bmltcGxlbWVudGFibGU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy40LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZwb3MiPiBbbGliLmZwb3NdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBEZWMgMTk5NzwvcD4KPHA+VGFibGUgODgsIGluIEkvTywgaXMgdG9vIHN0cmljdDsgaXQncyB1bmltcGxlbWVudGFibGUgb24gc3lzdGVtcwp3aGVyZSBhIGZpbGUgcG9zaXRpb24gaXNuJ3QganVzdCBhbiBvZmZzZXQuIEl0IGFsc28gbmV2ZXIgc2F5cyBqdXN0CndoYXQgZnBvcyZsdDsmZ3Q7IGlzIHJlYWxseSBzdXBwb3NlZCB0byBiZS4gIFtIZXJlJ3MgbXkgc3VtbWFyeSwgd2hpY2gKSmVycnkgYWdyZWVzIGlzIG1vcmUgb3IgbGVzcyBhY2N1cmF0ZS4gIkkgdGhpbmsgSSBub3cga25vdyB3aGF0CnRoZSBjbGFzcyByZWFsbHkgaXMsIGF0IHRoaXMgcG9pbnQ6IGl0J3MgYSBtYWdpYyBjb29raWUgdGhhdAplbmNhcHN1bGF0ZXMgYW4gbWJzdGF0ZV90IGFuZCBhIGZpbGUgcG9zaXRpb24gKHBvc3NpYmx5IHJlcHJlc2VudGVkIGFzCmFuIGZwb3NfdCksIGl0IGhhcyBzeW50YWN0aWMgc3VwcG9ydCBmb3IgcG9pbnRlci1saWtlIGFyaXRobWV0aWMsIGFuZAppbXBsZW1lbnRvcnMgYXJlIHJlcXVpcmVkIHRvIGhhdmUgcmVhbCwgbm90IGp1c3Qgc3ludGFjdGljLCBzdXBwb3J0CmZvciBhcml0aG1ldGljLiIgVGhpcyBpc24ndCBzdGFuZGFyZGVzZSwgb2YgY291cnNlLl0gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5Ob3QgYSBkZWZlY3QuIFRoZSBMV0cgYmVsaWV2ZXMgdGhhdCB0aGUgU3RhbmRhcmQgaXMgYWxyZWFkeSBjbGVhciwKYW5kIHRoYXQgdGhlIGFib3ZlIHN1bW1hcnkgaXMgd2hhdCB0aGUgU3RhbmRhcmQgaW4gZWZmZWN0IHNheXMuPC9wPgo8aHI+CjxhIG5hbWU9IjEwIj48aDM+MTAuJm5ic3A7Q29kZWN2dCZsdDsmZ3Q7OjpkbyB1bmNsZWFyPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29kZWN2dC5ieW5hbWUiPiBbbGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRHVwIj5EdXA8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE0IEphbiAxOTk4PC9wPgo8cD5TZWN0aW9uIDIyLjIuMS41LjIgc2F5cyB0aGF0IGNvZGVjdnQmbHQ7Jmd0Ozo6ZG9faW4gYW5kIGRvX291dApzaG91bGQgcmV0dXJuIHRoZSB2YWx1ZSBub2NvbnYgaWYgIm5vIGNvbnZlcnNpb24gd2FzCm5lZWRlZCIuIEhvd2V2ZXIsIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGFueXdoZXJlIHRoYXQgZGVmaW5lcyB3aGF0Cml0IG1lYW5zIGZvciBhIGNvbnZlcnNpb24gdG8gYmUgbmVlZGVkIG9yIG5vdCBuZWVkZWQuIEkgY2FuIHRoaW5rIG9mCnNldmVyYWwgY2lyY3Vtc3RhbmNlcyB3aGVyZSBvbmUgbWlnaHQgcGxhdXNpYmx5IHRoaW5rIHRoYXQgYQpjb252ZXJzaW9uIGlzIG5vdCAibmVlZGVkIiwgYnV0IEkgZG9uJ3Qga25vdyB3aGljaCBvbmUgaXMKaW50ZW5kZWQgaGVyZS4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5EdXBsaWNhdGUuIFNlZSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTkiPjE5PC9hPi48L3A+Cjxocj4KPGEgbmFtZT0iMTIiPjxoMz4xMi4mbmJzcDtXYXkgb2JqZWN0cyBob2xkIGFsbG9jYXRvcnMgdW5jbGVhcjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuZGVmYXVsdC5jb24ucmVxIj4gW2xpYi5kZWZhdWx0LmNvbi5yZXFdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZ2VsaWthIExhbmdlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMyBGZWIgMTk5ODwvcD4KPHA+SSBjb3VsZG4ndCBmaW5kIGEgc3RhdGVtZW50IGluIHRoZSBzdGFuZGFyZCBzYXlpbmcgd2hldGhlciB0aGUgYWxsb2NhdG9yIG9iamVjdCBoZWxkIGJ5CmEgY29udGFpbmVyIGlzIGhlbGQgYXMgYSBjb3B5IG9mIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudCBvciB3aGV0aGVyIGEgcG9pbnRlciBvZgpyZWZlcmVuY2UgaXMgbWFpbnRhaW5lZCBpbnRlcm5hbC4gVGhlcmUgaXMgYW4gYWNjb3JkaW5nIHN0YXRlbWVudCBmb3IgY29tcGFyZSBvYmplY3RzIGFuZApob3cgdGhleSBhcmUgbWFpbnRhaW5lZCBieSB0aGUgYXNzb2NpYXRpdmUgY29udGFpbmVycywgYnV0IEkgY291bGRuJ3QgZmluZCBhbnl0aGluZwpyZWdhcmRpbmcgYWxsb2NhdG9ycy4gPC9wPgoKPHA+RGlkIEkgb3Zlcmxvb2sgaXQ/IElzIGl0IGFuIG9wZW4gaXNzdWUgb3Iga25vd24gZGVmZWN0PyBPciBpcyBpdCBkZWxpYmVyYXRlbHkgbGVmdAp1bnNwZWNpZmllZD8gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5Ob3QgYSBkZWZlY3QuIFRoZSBMV0cgYmVsaWV2ZXMgdGhhdCB0aGUgU3RhbmRhcmQgaXMgYWxyZWFkeQpjbGVhci4mbmJzcDsgU2VlIDIzLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzIj4gW2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzXTwvYT4sIHBhcmFncmFwaCA4LjwvcD4KPGhyPgo8YSBuYW1lPSI0MyI+PGgzPjQzLiZuYnNwO0xvY2FsZSB0YWJsZSBjb3JyZWN0aW9uPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29kZWN2dC5ieW5hbWUiPiBbbGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRHVwIj5EdXA8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QnJlbmRhbiBLZWhvZSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxIEp1biAxOTk4PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5EdXBsaWNhdGUuIFNlZSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzMiPjMzPC9hPi48L3A+Cjxocj4KPGEgbmFtZT0iNDUiPjxoMz40NS4mbmJzcDtTdHJpbmdzdHJlYW1zIHJlYWQvd3JpdGUgcG9pbnRlcnMgaW5pdGlhbCBwb3NpdGlvbiB1bmNsZWFyPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyaW5nc3RyZWFtIj4gW2xpYi5vc3RyaW5nc3RyZWFtXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0aGlhcyBNdWVsbGVyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI3IE1heSAxOTk4PC9wPgo8cD5JbiBhIGNvbXAubGFuZy5jKysubW9kZXJhdGVkIE1hdHRoaWFzIE11ZWxsZXIgd3JvdGU6PC9wPgoKPHA+IldlIGFyZSBub3Qgc3VyZSBob3cgdG8gaW50ZXJwcmV0IHRoZSBDRDIgKHNlZSAyNy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3N0cmVhbS5mb3J3YXJkIj4gW2xpYi5pb3N0cmVhbS5mb3J3YXJkXTwvYT4sIDI3LjcuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyaW5nc3RyZWFtLmNvbnMiPiBbbGliLm9zdHJpbmdzdHJlYW0uY29uc108L2E+LCAyNy43LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyaW5nYnVmLmNvbnMiPiBbbGliLnN0cmluZ2J1Zi5jb25zXTwvYT4pCndpdGggcmVzcGVjdCB0byB0aGUgcXVlc3Rpb24gYXMgdG8gd2hhdCB0aGUgY29ycmVjdCBpbml0aWFsIHBvc2l0aW9ucwpvZiB0aGUgd3JpdGUgYW5kJm5ic3A7IHJlYWQgcG9pbnRlcnMgb2YgYSBzdHJpbmdzdHJlYW0gc2hvdWxkCmJlLiI8L3A+Cgo8cD4iSXMgaXQgdGhlIHNhbWUgdG8gb3V0cHV0IHR3byBzdHJpbmdzIG9yIHRvIGluaXRpYWxpemUgdGhlIHN0cmluZ3N0cmVhbSB3aXRoIHRoZQpmaXJzdCBhbmQgdG8gb3V0cHV0IHRoZSBzZWNvbmQ/IjwvcD4KCjxwPjxpPltQSiBQbGF1Z2VyLCBCamFybmUgU3Ryb3VzdHJ1cCwgUmFuZHkgU21pdGhleSwgU2VhbiBDb3JmaWVsZCwgYW5kCkplcnJ5IFNjaHdhcnogaGF2ZSBhbGwgb2ZmZXJlZCBvcGluaW9uczsgc2VlIHJlZmxlY3RvciBtZXNzYWdlcwpsaWItNjUxOCwgNjUxOSwgNjUyMCwgNjUyMSwgNjUyMywgNjUyNC5dPC9pPjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgYmVsaWV2ZXMgdGhlIFN0YW5kYXJkIGlzIGNvcnJlY3QgYXMgd3JpdHRlbi4gVGhlIGJlaGF2aW9yCm9mIHN0cmluZ3N0cmVhbXMgaXMgY29uc2lzdGVudCB3aXRoIGZzdHJlYW1zLCBhbmQgdGhlcmUgaXMgYQpjb25zdHJ1Y3RvciB3aGljaCBjYW4gYmUgdXNlZCB0byBvYnRhaW4gdGhlIGRlc2lyZWQgZWZmZWN0LiBUaGlzCmJlaGF2aW9yIGlzIGtub3duIHRvIGJlIGRpZmZlcmVudCBmcm9tIHN0cnN0cmVhbXMuPC9wPgo8aHI+CjxhIG5hbWU9IjU4Ij48aDM+NTguJm5ic3A7RXh0cmFjdGluZyBhIGNoYXIgZnJvbSBhIHdpZGUtb3JpZW50ZWQgc3RyZWFtPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4xLjIuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbTo6ZXh0cmFjdG9ycyI+IFtsaWIuaXN0cmVhbTo6ZXh0cmFjdG9yc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEgSnVsIDE5OTg8L3A+CjxwPjI3LjYuMS4yLjMgaGFzIG1lbWJlciBmdW5jdGlvbnMgZm9yIGV4dHJhY3Rpb24gb2Ygc2lnbmVkIGNoYXIgYW5kCnVuc2lnbmVkIGNoYXIsIGJvdGggc2luZ2x5IGFuZCBhcyBzdHJpbmdzLiBIb3dldmVyLCBpdCBkb2Vzbid0IHNheQp3aGF0IGl0IG1lYW5zIHRvIGV4dHJhY3QgYSA8dHQ+Y2hhcjwvdHQ+IGZyb20gYQo8dHQ+YmFzaWNfc3RyZWFtYnVmJmx0O2NoYXJULCBUcmFpdHMmZ3Q7PC90dD4uIDwvcD4KCjxwPmJhc2ljX3N0cmVhbWJ1ZiwgYWZ0ZXIgYWxsLCBoYXMgbm8gbWVtYmVycyB0byBleHRyYWN0IGEgY2hhciwgc28KYmFzaWNfaXN0cmVhbSBtdXN0IHNvbWVob3cgY29udmVydCBmcm9tIGNoYXJUIHRvIHNpZ25lZCBjaGFyIG9yCnVuc2lnbmVkIGNoYXIuIFRoZSBzdGFuZGFyZCBkb2Vzbid0IHNheSBob3cgaXQgaXMgdG8gcGVyZm9ybSB0aGF0CmNvbnZlcnNpb24uIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIFN0YW5kYXJkIGlzIGNvcnJlY3QgYXMgd3JpdHRlbi4gIFRoZXJlIGlzIG5vIHN1Y2ggZXh0cmFjdG9yIGFuZAp0aGlzIGlzIHRoZSBpbnRlbnQgb2YgdGhlIExXRy48L3A+Cjxocj4KPGEgbmFtZT0iNjUiPjxoMz42NS4mbmJzcDtVbmRlcnNwZWNpZmljYXRpb24gb2Ygc3Ryc3RyZWFtYnVmOjpzZWVrb2ZmPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7RC43LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2Z1dHVyZS5odG1sI2RlcHIuc3Ryc3RyZWFtYnVmLnZpcnR1YWxzIj4gW2RlcHIuc3Ryc3RyZWFtYnVmLnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTggQXVnIDE5OTg8L3A+CjxwPlRoZSBzdGFuZGFyZCBzYXlzIGhvdyB0aGlzIG1lbWJlciBmdW5jdGlvbiBhZmZlY3RzIHRoZSBjdXJyZW50CnN0cmVhbSBwb3NpdGlvbi4gKDx0dD5ncHRyPC90dD4gb3IgPHR0PnBwdHI8L3R0PikgSG93ZXZlciwgaXQgZG9lcyBub3QKc2F5IGhvdyB0aGlzIG1lbWJlciBmdW5jdGlvbiBhZmZlY3RzIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUKZ2V0L3B1dCBhcmVhLiA8L3A+Cgo8cD5UaGlzIGlzIGFuIGlzc3VlIHdoZW4gc2Vla29mZiBpcyB1c2VkIHRvIHBvc2l0aW9uIHRoZSBnZXQgcG9pbnRlcgpiZXlvbmQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCByZWFkIGFyZWEuIChXaGljaCBpcyBsZWdhbC4gVGhpcyBpcwppbXBsaWNpdCBpbiB0aGUgZGVmaW5pdGlvbiBvZiA8aT5zZWVraGlnaDwvaT4gaW4gRC43LjEsIHBhcmFncmFwaCA0LikKPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGFncmVlcyB0aGF0IHNlZWtvZmYoKSBpcyB1bmRlcnNwZWNpZmllZCwgYnV0IGRvZXMgbm90IHdpc2gKdG8gaW52ZXN0IGVmZm9ydCBpbiB0aGlzIGRlcHJlY2F0ZWQgZmVhdHVyZS48L3A+Cjxocj4KPGEgbmFtZT0iNjciPjxoMz42Ny4mbmJzcDtTZXR3IHVzZWxlc3MgZm9yIHN0cmluZ3M8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4zLjcuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZy5pbyI+IFtsaWIuc3RyaW5nLmlvXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEdXAiPkR1cDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtTdGV2ZSBDbGFtYWdlJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzkgSnVsIDE5OTg8L3A+CjxwPkluIGEgY29tcC5zdGQuYysrIHBvc3RpbmcgTWljaGVsIE1pY2hhdWQgd3JvdGU6IFdoYXQKc2hvdWxkIGJlIG91dHB1dCBieTogPC9wPgoKPHByZT4gICBzdHJpbmcgdGV4dCgiSGVsbG8iKTsKICAgY291dCAmbHQ7Jmx0OyAnWycgJmx0OyZsdDsgc2V0dygxMCkgJmx0OyZsdDsgcmlnaHQgJmx0OyZsdDsgdGV4dCAmbHQ7Jmx0OyAnXSc7CjwvcHJlPgoKPHA+U2hvdWxkbid0IGl0IGJlOjwvcD4KCjxwcmU+ICAgWyAgICAgSGVsbG9dPC9wcmU+Cgo8cD5Bbm90aGVyIHBlcnNvbiByZXBsaWVkOiBBY3R1YWxseSwgYWNjb3JkaW5nIHRvIHRoZSBGRElTLCB0aGUgd2lkdGgKb2YgdGhlIGZpZWxkIHNob3VsZCBiZSB0aGUgbWluaW11bSBvZiB3aWR0aCBhbmQgdGhlIGxlbmd0aCBvZiB0aGUKc3RyaW5nLCBzbyB0aGUgb3V0cHV0IHNob3VsZG4ndCBoYXZlIGFueSBwYWRkaW5nLiBJIHRoaW5rIHRoYXQgdGhpcyBpcwphIHR5cG8sIGhvd2V2ZXIsIGFuZCB0aGF0IHdoYXQgaXMgd2FudGVkIGlzIHRoZSBtYXhpbXVtIG9mIHRoZQp0d28uIChBcyB3cml0dGVuLCBzZXR3IGlzIHVzZWxlc3MgZm9yIHN0cmluZ3MuIElmIHRoYXQgaGFkIGJlZW4gdGhlCmludGVudCwgb25lIHdvdWxkbid0IGV4cGVjdCB0aGVtIHRvIGhhdmUgbWVudGlvbmVkIHVzaW5nIGl0cyB2YWx1ZS4pCjwvcD4KCjxwPkl0J3Mgd29ydGggcG9pbnRpbmcgb3V0IHRoYXQgdGhpcyBpcyBhIHJlY2VudCBjb3JyZWN0aW9uIGFueXdheTsKSUlSQywgZWFybGllciB2ZXJzaW9ucyBvZiB0aGUgZHJhZnQgZm9yZ290IHRvIG1lbnRpb24gZm9ybWF0dGluZwpwYXJhbWV0ZXJzIHdoYXRzb2V2ZXIuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5EdXBsaWNhdGUuIFNlZSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjUiPjI1PC9hPi48L3A+Cjxocj4KPGEgbmFtZT0iNzIiPjxoMz43Mi4mbmJzcDtEb19jb252ZXJ0IHBoYW50b20gbWVtYmVyIGZ1bmN0aW9uPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29kZWN2dC5ieW5hbWUiPiBbbGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRHVwIj5EdXA8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI0IEF1ZyAxOTk4PC9wPgo8cD5JbiAyMi4yLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZSI+IFtsaWIubG9jYWxlLmNvZGVjdnQuYnluYW1lXTwvYT4gcGFyIDMsIGFuZCBpbiA8Zm9udCBjb2xvcj0icmVkIj4yMi4yLjEuNS4yPC9mb250PiBwYXIgOCwgYSBub25leGlzdGVudCBtZW1iZXIgZnVuY3Rpb24KImRvX2NvbnZlcnQiIGlzIG1lbnRpb25lZC4gVGhpcyBtZW1iZXIgd2FzIHJlcGxhY2VkIHdpdGgKImRvX2luIiBhbmQgImRvX291dCIsIHRoZSBwcm9wZXIgcmVmZXJlbnRzIGluIHRoZQpjb250ZXh0cyBhYm92ZS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkR1cGxpY2F0ZTogc2VlIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNCI+MjQ8L2E+LjwvcD4KPGhyPgo8YSBuYW1lPSI3MyI+PGgzPjczLiZuYnNwOzx0dD5pc19vcGVuPC90dD4gc2hvdWxkIGJlIGNvbnN0PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuOC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5mc3RyZWFtcyI+IFtsaWIuZnN0cmVhbXNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNyBBdWcgMTk5ODwvcD4KPHA+Q2xhc3NlcyA8dHQ+YmFzaWNfaWZzdHJlYW08L3R0PiwgPHR0PmJhc2ljX29mc3RyZWFtPC90dD4sIGFuZAo8dHQ+YmFzaWNfZnN0cmVhbTwvdHQ+IGFsbCBoYXZlIGEgbWVtYmVyIGZ1bmN0aW9uIDx0dD5pc19vcGVuPC90dD4uIEl0CnNob3VsZCBiZSBhIDx0dD5jb25zdDwvdHQ+IG1lbWJlciBmdW5jdGlvbiwgc2luY2UgaXQgZG9lcyBub3RoaW5nIGJ1dApjYWxsIG9uZSBvZiA8dHQ+YmFzaWNfZmlsZWJ1ZjwvdHQ+J3MgY29uc3QgbWVtYmVyIGZ1bmN0aW9ucy4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5Ob3QgYSBkZWZlY3QuIFRoaXMgaXMgYSBkZWxpYmVyYXRlIGZlYXR1cmU7IGNvbnN0IHN0cmVhbXMgd291bGQgYmUKbWVhbmluZ2xlc3MuPC9wPgo8aHI+CjxhIG5hbWU9Ijc3Ij48L2E+PGgzPjxhIG5hbWU9Ijc3Ij43Ny4mbmJzcDtWYWxhcnJheSBvcGVyYXRvcltdIGNvbnN0IHJldHVybmluZyB2YWx1ZTwvYT48L2gzPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI2LjUuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnZhbGFycmF5LmFjY2VzcyI+IFtsaWIudmFsYXJyYXkuYWNjZXNzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNGdXR1cmUiPkZ1dHVyZTwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtMZXZlbnRlIEZhcmthcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs5IFNlcCAxOTk4PC9wPgo8cD52YWxhcnJheTo8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD5UIG9wZXJhdG9yW10gKHNpemVfdCkgY29uc3Q7PC90dD48YnI+Cjxicj4Kd2h5IG5vdCA8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD5jb25zdCBUJmFtcDsgb3BlcmF0b3JbXSAoc2l6ZV90KSBjb25zdDs8L3R0Pjxicj4KPGJyPgphcyBpbiB2ZWN0b3IgPz8/PGJyPgo8YnI+Ck9uZSBjYW4ndCBjb3B5IGV2ZW4gZnJvbSBhIGNvbnN0IHZhbGFycmF5IGVnOjxicj4KPGJyPgombmJzcDsmbmJzcDsmbmJzcDsgPHR0Pm1lbWNweShwdHIsICZhbXA7dlswXSwgdi5zaXplKCkgKiBzaXplb2YoZG91YmxlKSk7PGJyPgo8L3R0Pjxicj4KW0ldIGZpbmQgdGhpcyBidWcgaW4gdmFsYXJyYXkgaXMgdmVyeSBkaWZmaWN1bHQuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGJlbGlldmVzIHRoYXQgdGhlIGludGVyZmFjZSB3YXMgZGVsaWJlcmF0ZWx5IGRlc2lnbmVkIHRoYXQKd2F5LiBUaGF0IGlzIHdoYXQgdmFsYXJyYXkgd2FzIGRlc2lnbmVkIHRvIGRvOyB0aGF0J3Mgd2hlcmUgdGhlCiJ2YWx1ZSBhcnJheSIgbmFtZSBjb21lcyBmcm9tLiBMV0cgbWVtYmVycyBmdXJ0aGVyIGNvbW1lbnQKdGhhdCAid2UgZG9uJ3Qgd2FudCB2YWxhcnJheSB0byBiZSBhIGZ1bGwgU1RMIGNvbnRhaW5lci4iCjI2LjUuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnZhbGFycmF5LmFjY2VzcyI+IFtsaWIudmFsYXJyYXkuYWNjZXNzXTwvYT4gc3BlY2lmaWVzIHByb3BlcnRpZXMgdGhhdCBpbmRpY2F0ZSAiYW4KYWJzZW5jZSBvZiBhbGlhc2luZyIgZm9yIG5vbi1jb25zdGFudCBhcnJheXM7IHRoaXMgYWxsb3dzCm9wdGltaXphdGlvbnMsIGluY2x1ZGluZyBzcGVjaWFsIGhhcmR3YXJlIG9wdGltaXphdGlvbnMsIHRoYXQgYXJlIG5vdApvdGhlcndpc2UgcG9zc2libGUuIDwvcD4KPGhyPgo8YSBuYW1lPSI4MSI+PGgzPjgxLiZuYnNwO1dyb25nIGRlY2xhcmF0aW9uIG9mIHNsaWNlIG9wZXJhdGlvbnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNi4zLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuY29tcGxleC5tZW1iZXIub3BzIj4gW2xpYi5jb21wbGV4Lm1lbWJlci5vcHNdPC9hPiwgMjYuMy43IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmNvbXBsZXgudmFsdWUub3BzIj4gW2xpYi5jb21wbGV4LnZhbHVlLm9wc108L2E+LCAyNi4zLjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuY29tcGxleC50cmFuc2NlbmRlbnRhbHMiPiBbbGliLmNvbXBsZXgudHJhbnNjZW5kZW50YWxzXTwvYT4sIDI2LjMuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5jbXBseC5vdmVyIj4gW2xpYi5jbXBseC5vdmVyXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOaWNvIEpvc3V0dGlzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI5IFNlcCAxOTk4PC9wPgo8cD5Jc24ndCB0aGUgZGVmaW5pdGlvbiBvZiBjb3B5IGNvbnN0cnVjdG9yIGFuZCBhc3NpZ25tZW50IG9wZXJhdG9ycyB3cm9uZz8KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IEluc3RlYWQgb2Y8L3A+Cgo8cHJlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzbGljZV9hcnJheShjb25zdCBzbGljZV9hcnJheSZhbXA7KTsgCiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzbGljZV9hcnJheSZhbXA7IG9wZXJhdG9yPShjb25zdCBzbGljZV9hcnJheSZhbXA7KTs8L3ByZT4KCjxwPklNSE8gdGhleSBoYXZlIHRvIGJlPC9wPgoKPHByZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtzbGljZV9hcnJheShjb25zdCBzbGljZV9hcnJheSZsdDtUJmd0OyZhbXA7KTsgCiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3NsaWNlX2FycmF5JmFtcDsgb3BlcmF0b3I9KGNvbnN0IHNsaWNlX2FycmF5Jmx0O1QmZ3Q7JmFtcDspOzwvcHJlPgoKPHA+U2FtZSBmb3IgZ3NsaWNlX2FycmF5LiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPk5vdCBhIGRlZmVjdC4gVGhlIFN0YW5kYXJkIGlzIGNvcnJlY3QgYXMgd3JpdHRlbi4gPC9wPgo8aHI+CjxhIG5hbWU9IjgyIj48aDM+ODIuJm5ic3A7TWlzc2luZyBjb25zdGFudCBmb3Igc2V0IGVsZW1lbnRzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05pY28gSm9zdXR0aXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjkgU2VwIDE5OTg8L3A+CjxwPlBhcmFncmFwaCA1IHNwZWNpZmllczo8L3A+Cgo8YmxvY2txdW90ZT4KRm9yIHNldCBhbmQgbXVsdGlzZXQgdGhlIHZhbHVlIHR5cGUgaXMgdGhlIHNhbWUgYXMgdGhlIGtleSB0eXBlLiBGb3IKbWFwIGFuZCBtdWx0aW1hcCBpdCBpcyBlcXVhbCB0byBwYWlyJmx0O2NvbnN0IEtleSwgVCZndDsuICAKPC9ibG9ja3F1b3RlPgoKPHA+U3RyaWN0bHkgc3BlYWtpbmcsIHRoaXMgaXMgbm90IGNvcnJlY3QgYmVjYXVzZSBmb3Igc2V0IGFuZCBtdWx0aXNldAp0aGUgdmFsdWUgdHlwZSBpcyB0aGUgc2FtZSBhcyB0aGUgPGI+Y29uc3RhbnQ8L2I+IGtleSB0eXBlLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+Tm90IGEgZGVmZWN0LiBUaGUgU3RhbmRhcmQgaXMgY29ycmVjdCBhcyB3cml0dGVuOyBpdCB1c2VzIGEKZGlmZmVyZW50IG1lY2hhbmlzbSAoY29uc3QgJmFtcDspIGZvciA8dHQ+c2V0PC90dD4gYW5kCjx0dD5tdWx0aXNldDwvdHQ+LiBTZWUgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEwMyI+MTAzPC9hPiBmb3IgYSByZWxhdGVkCmlzc3VlLjwvcD4KPGhyPgo8YSBuYW1lPSI4NCI+PGgzPjg0LiZuYnNwO0FtYmlndWl0eSB3aXRoIHN0cmluZzo6aW5zZXJ0KCk8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4zLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmcubW9kaWZpZXJzIj4gW2xpYi5zdHJpbmcubW9kaWZpZXJzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOaWNvIEpvc3V0dGlzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI5IFNlcCAxOTk4PC9wPgo8cD5JZiBJIHRyeTwvcD4KPHByZT4gICAgcy5pbnNlcnQoMCwxLCcgJyk7PC9wcmU+Cgo8cD4mbmJzcDsgSSBnZXQgYW4gbmFzdHkgYW1iaWd1aXR5LiBJdCBtaWdodCBiZTwvcD4KPHByZT4gICAgcy5pbnNlcnQoKHNpemVfdHlwZSkwLChzaXplX3R5cGUpMSwoY2hhclQpJyAnKTs8L3ByZT4KCjxwPndoaWNoIGluc2VydHMgMSBzcGFjZSBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gMCwgb3I8L3A+CjxwcmU+ICAgIHMuaW5zZXJ0KChjaGFyKikwLChzaXplX3R5cGUpMSwoY2hhclQpJyAnKTwvcHJlPgoKPHA+d2hpY2ggaW5zZXJ0cyAxIHNwYWNlIGNoYXJhY3RlciBhdCBpdGVyYXRvci9hZGRyZXNzIDAgKGJpbmdvISksIG9yPC9wPgo8cHJlPiAgICBzLmluc2VydCgoY2hhciopMCwgKElucHV0SXRlcmF0b3IpMSwgKElucHV0SXRlcmF0b3IpJyAnKTwvcHJlPgoKPHA+d2hpY2ggbm9ybWFsbHkgaW5zZXJ0cyBjaGFyYWN0ZXJzIGZyb20gaXRlcmF0b3IgMSB0byBpdGVyYXRvciAnCicuIEJ1dCBhY2NvcmRpbmcgdG8gMjMuMS4xLjkgKHRoZSAiZG8gdGhlIHJpZ2h0IHRoaW5nIiBmaXgpCml0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIHNlY29uZC4gSG93ZXZlciwgaXQgaXMgc3RpbGwgYW1iaWd1b3VzLApiZWNhdXNlIG9mIGNvdXJzZSBJIG1lYW4gdGhlIGZpcnN0ITwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+Tm90IGEgZGVmZWN0LiBUaGUgTFdHIGJlbGlldmVzIHRoaXMgaXMgYSAiZ2VuZXRpYwptaXNmb3J0dW5lIiBpbmhlcmVudCBpbiB0aGUgZGVzaWduIG9mIHN0cmluZyBhbmQgdGh1cyBub3QgYQpkZWZlY3QgaW4gdGhlIFN0YW5kYXJkIGFzIHN1Y2ggLjwvcD4KPGhyPgo8YSBuYW1lPSI4NSI+PGgzPjg1LiZuYnNwO1N0cmluZyBjaGFyIHR5cGVzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmdzIj4gW2xpYi5zdHJpbmdzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOaWNvIEpvc3V0dGlzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI5IFNlcCAxOTk4PC9wPgo8cD5UaGUgc3RhbmRhcmQgc2VlbXMgbm90IHRvIHJlcXVpcmUgdGhhdCBjaGFyVCBpcyBlcXVpdmFsZW50IHRvCnRyYWl0czo6Y2hhcl90eXBlLiBTbywgd2hhdCBoYXBwZW5zIGlmIGNoYXJUIGlzIG5vdCBlcXVpdmFsZW50IHRvCnRyYWl0czo6Y2hhcl90eXBlPzwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlcmUgaXMgYWxyZWFkeSB3b3JkaW5nIGluIDIxLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5jaGFyLnRyYWl0cyI+IFtsaWIuY2hhci50cmFpdHNdPC9hPiBwYXJhZ3JhcGggMyB0aGF0CnJlcXVpcmVzIHRoZW0gdG8gYmUgdGhlIHNhbWUuPC9wPgo8aHI+CjxhIG5hbWU9Ijg3Ij48aDM+ODcuJm5ic3A7RXJyb3IgaW4gZGVzY3JpcHRpb24gb2Ygc3RyaW5nOjpjb21wYXJlKCk8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4zLjYuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZzo6Y29tcGFyZSI+IFtsaWIuc3RyaW5nOjpjb21wYXJlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEdXAiPkR1cDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOaWNvIEpvc3V0dGlzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI5IFNlcCAxOTk4PC9wPgo8cD5UaGUgZm9sbG93aW5nIGNvbXBhcmUoKSBkZXNjcmlwdGlvbiBpcyBvYnZpb3VzbHkgYSBidWc6PC9wPgoKPHByZT5pbnQgY29tcGFyZShzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIAogICAgICAgICAgICBjaGFyVCAqcywgc2l6ZV90eXBlIG4yID0gbnBvcykgY29uc3Q7CjwvcHJlPgoKPHA+YmVjYXVzZSB3aXRob3V0IHBhc3NpbmcgbjIgaXQgc2hvdWxkIGNvbXBhcmUgdXAgdG8gdGhlIGVuZCBvZiB0aGUKc3RyaW5nIGluc3RlYWQgb2YgY29tcGFyaW5nIG5wb3MgY2hhcmFjdGVycyAod2hpY2ggdGhyb3dzIGFuCmV4Y2VwdGlvbikgPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5EdXBsaWNhdGU7IHNlZSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNSI+NTwvYT4uPC9wPgo8aHI+CjxhIG5hbWU9Ijg4Ij48aDM+ODguJm5ic3A7SW5jb25zaXN0ZW5jeSBiZXR3ZWVuIHN0cmluZzo6aW5zZXJ0KCkgYW5kIHN0cmluZzo6YXBwZW5kKCk8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4zLjUuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZzo6aW5zZXJ0Ij4gW2xpYi5zdHJpbmc6Omluc2VydF08L2E+LCAyMS4zLjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZzo6YXBwZW5kIj4gW2xpYi5zdHJpbmc6OmFwcGVuZF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmljbyBKb3N1dHRpcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBTZXAgMTk5ODwvcD4KPHA+V2h5IGRvZXMgPC9wPgo8cHJlPiAgdGVtcGxhdGUmbHQ7Y2xhc3MgSW5wdXRJdGVyYXRvciZndDsgCiAgICAgICBiYXNpY19zdHJpbmcmYW1wOyBhcHBlbmQoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KTs8L3ByZT4KCjxwPnJldHVybiBhIHN0cmluZywgd2hpbGU8L3A+CjxwcmU+ICB0ZW1wbGF0ZSZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OyAKICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIHAsIElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCk7PC9wcmU+Cgo8cD5yZXR1cm5zIG5vdGhpbmcgPzwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBiZWxpZXZlcyB0aGlzIHN0eWxpc3RpYyBpbmNvbnNpc3RlbmN5IGlzIG5vdCBzdWZmaWNpZW50bHkgCnNlcmlvdXMgdG8gY29uc3RpdHV0ZSBhIGRlZmVjdC48L3A+Cjxocj4KPGEgbmFtZT0iODkiPjxoMz44OS4mbmJzcDtNaXNzaW5nIHRocm93IHNwZWNpZmljYXRpb24gZm9yIHN0cmluZzo6aW5zZXJ0KCkgYW5kIHN0cmluZzo6cmVwbGFjZSgpPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMy41LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmc6Omluc2VydCI+IFtsaWIuc3RyaW5nOjppbnNlcnRdPC9hPiwgMjEuMy41LjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmc6OnJlcGxhY2UiPiBbbGliLnN0cmluZzo6cmVwbGFjZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRHVwIj5EdXA8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmljbyBKb3N1dHRpcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBTZXAgMTk5ODwvcD4KPHA+QWxsIGluc2VydCgpIGFuZCByZXBsYWNlKCkgbWVtYmVycyBmb3Igc3RyaW5ncyB3aXRoIGFuIGl0ZXJhdG9yIGFzCmZpcnN0IGFyZ3VtZW50IGxhY2sgYSB0aHJvdyBzcGVjaWZpY2F0aW9uLiBUaGUgdGhyb3cKc3BlY2lmaWNhdGlvbiBzaG91bGQgcHJvYmFibHkgYmU6IGxlbmd0aF9lcnJvciBpZiBzaXplIGV4Y2VlZHMKbWF4aW11bS4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5Db25zaWRlcmVkIGEgZHVwbGljYXRlIGJlY2F1c2UgaXQgd2lsbCBiZSBzb2x2ZWQgYnkgdGhlIHJlc29sdXRpb24Kb2YgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzgzIj44MzwvYT4uPC9wPgo8aHI+CjxhIG5hbWU9IjkzIj48aDM+OTMuJm5ic3A7SW5jb21wbGV0ZSBWYWxhcnJheSBTdWJzZXQgRGVmaW5pdGlvbnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmNvbXBsZXgubnVtYmVycyI+IFtsaWIuY29tcGxleC5udW1iZXJzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOaWNvIEpvc3V0dGlzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI5IFNlcCAxOTk4PC9wPgo8cD5Zb3UgY2FuIGVhc2lseSBjcmVhdGUgc3Vic2V0cywgYnV0IHlvdSBjYW4ndCBlYXNpbHkgY29tYmluZSB0aGVtCndpdGggb3RoZXIgc3Vic2V0cy4gIFVuZm9ydHVuYXRlbHksIHlvdSBhbG1vc3QgYWx3YXlzIG5lZWRzIGFuCmV4cGxpY2l0IHR5cGUgY29udmVyc2lvbiB0byB2YWxhcnJheS4gVGhpcyBpcyBiZWNhdXNlIHRoZSBzdGFuZGFyZApkb2VzIG5vdCBzcGVjaWZ5IHRoYXQgdmFsYXJyYXkgc3Vic2V0cyBwcm92aWRlIHRoZSBzYW1lIG9wZXJhdGlvbnMgYXMKdmFsYXJyYXlzLiA8L3A+Cgo8cD5Gb3IgZXhhbXBsZSwgdG8gbXVsdGlwbHkgdHdvIHN1YnNldHMgYW5kIGFzc2lnbiB0aGUgcmVzdWx0IHRvIGEgdGhpcmQgc3Vic2V0LCB5b3UgY2FuJ3QKd3JpdGUgdGhlIGZvbGxvd2luZzo8L3A+Cgo8cHJlPnZhW3NsaWNlKDAsNCwzKV0gPSB2YVtzbGljZSgxLDQsMyldICogdmFbc2xpY2UoMiw0LDMpXTs8L3ByZT4KCjxwPkluc3RlYWQsIHlvdSBoYXZlIHRvIGNvZGUgYXMgZm9sbG93czo8L3A+Cgo8cHJlPnZhW3NsaWNlKDAsNCwzKV0gPSBzdGF0aWNfY2FzdCZsdDt2YWxhcnJheSZsdDtkb3VibGUmZ3Q7ICZndDsodmFbc2xpY2UoMSw0LDMpXSkgKiAKICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0Jmx0O3ZhbGFycmF5Jmx0O2RvdWJsZSZndDsgJmd0Oyh2YVtzbGljZSgyLDQsMyldKTs8L3ByZT4KCjxwPlRoaXMgaXMgdGVkaW91cyBhbmQgZXJyb3ItcHJvbmUuIEV2ZW4gd29yc2UsIGl0IGNvc3RzIHBlcmZvcm1hbmNlIGJlY2F1c2UgZWFjaCBjYXN0CmNyZWF0ZXMgYSB0ZW1wb3Jhcnkgb2JqZWN0cywgd2hpY2ggY291bGQgYmUgYXZvaWRlZCB3aXRob3V0IHRoZSBjYXN0LiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+RXh0ZW5kIGFsbCB2YWxhcnJheSBzdWJzZXQgdHlwZXMgc28gdGhhdCB0aGV5IG9mZmVyIGFsbCB2YWxhcnJheSBvcGVyYXRpb25zLjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgaXMgbm90IGEgZGVmZWN0IGluIHRoZSBTdGFuZGFyZDsgaXQgaXMgYSByZXF1ZXN0IGZvciBhbiBleHRlbnNpb24uPC9wPgo8aHI+CjxhIG5hbWU9Ijk0Ij48aDM+OTQuJm5ic3A7TWF5IGxpYnJhcnkgaW1wbGVtZW50b3JzIGFkZCB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIHRvIFN0YW5kYXJkIExpYnJhcnkgY2xhc3Nlcz88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxNy40LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIuY29uZm9ybWluZyI+IFtsaWIuY29uZm9ybWluZ108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIyIEphbiAxOTk4PC9wPgo8cD5JcyBpdCBhIHBlcm1pdHRlZCBleHRlbnNpb24gZm9yIGxpYnJhcnkgaW1wbGVtZW50b3JzIHRvIGFkZCB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIHRvCnN0YW5kYXJkIGxpYnJhcnkgY2xhc3NlcywgcHJvdmlkZWQgdGhhdCB0aG9zZSBleHRyYSBwYXJhbWV0ZXJzIGhhdmUgZGVmYXVsdHM/IEZvciBleGFtcGxlLAppbnN0ZWFkIG9mIGRlZmluaW5nIDx0dD50ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQWxsb2MgPSBhbGxvY2F0b3ImbHQ7VCZndDsgJmd0OyBjbGFzcwp2ZWN0b3I7PC90dD4gZGVmaW5pbmcgaXQgYXMgPHR0PnRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBBbGxvYyA9IGFsbG9jYXRvciZsdDtUJmd0OywKaW50IE4gPSAxJmd0OyBjbGFzcyB2ZWN0b3I7PC90dD4gPC9wPgoKPHA+VGhlIHN0YW5kYXJkIG1heSB3ZWxsIGFscmVhZHkgYWxsb3cgdGhpcyAoSSBjYW4ndCB0aGluayBvZiBhbnkgd2F5IHRoYXQgdGhpcyBleHRlbnNpb24KY291bGQgYnJlYWsgYSBjb25mb3JtaW5nIHByb2dyYW0sIGNvbnNpZGVyaW5nIHRoYXQgdXNlcnMgYXJlIG5vdCBwZXJtaXR0ZWQgdG8KZm9yd2FyZC1kZWNsYXJlIHN0YW5kYXJkIGxpYnJhcnkgY29tcG9uZW50cyksIGJ1dCBpdCBvdWdodCB0byBiZSBleHBsaWNpdGx5IHBlcm1pdHRlZCBvcgpmb3JiaWRkZW4uIDwvcD4KCjxwPmNvbW1lbnQgZnJvbSBTdGV2ZSBDbGVhcnkgdmlhIGNvbXAuc3RkLmMrKzo8L3A+CjxibG9ja3F1b3RlPgo8cD5JIGRpc2FncmVlIFt3aXRoIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uXSBmb3IgdGhlIGZvbGxvd2luZyByZWFzb246CmNvbnNpZGVyIHVzZXIgbGlicmFyeSBjb2RlIHdpdGggdGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVycy4gRm9yCmV4YW1wbGUsIGEgdXNlciBsaWJyYXJ5IG9iamVjdCBtYXkgYmUgdGVtcGxhdGVkIG9uIHRoZSB0eXBlIG9mCnVuZGVybHlpbmcgc2VxdWVuY2Ugc3RvcmFnZSB0byB1c2UgKGRlcXVlL2xpc3QvdmVjdG9yKSwgc2luY2UgdGhlc2UKY2xhc3NlcyBhbGwgdGFrZSB0aGUgc2FtZSBudW1iZXIgYW5kIHR5cGUgb2YgdGVtcGxhdGUgcGFyYW1ldGVyczsgdGhpcwp3b3VsZCBhbGxvdyB0aGUgdXNlciB0byBkZXRlcm1pbmUgdGhlIHBlcmZvcm1hbmNlIHRyYWRlb2ZmcyBvZiB0aGUKdXNlciBsaWJyYXJ5IG9iamVjdC4gQSBzaW1pbGFyIGV4YW1wbGUgaXMgYSB1c2VyIGxpYnJhcnkgb2JqZWN0CnRlbXBsYXRlZCBvbiB0aGUgdHlwZSBvZiB1bmRlcmx5aW5nIHNldCBzdG9yYWdlIChzZXQvbXVsdGlzZXQpIG9yIG1hcApzdG9yYWdlIChtYXAvbXVsdGltYXApLCB3aGljaCB3b3VsZCBhbGxvdyB1c2VycyB0byBjaGFuZ2UgKHdpdGhpbgpyZWFzb24pIHRoZSBzZW1hbnRpYyBtZWFuaW5ncyBvZiBvcGVyYXRpb25zIG9uIHRoYXQgb2JqZWN0LjwvcD4KPHA+SSB0aGluayB0aGF0IGFkZGl0aW9uYWwgdGVtcGxhdGUgcGFyYW1ldGVycyBzaG91bGQgYmUgZm9yYmlkZGVuIGluCnRoZSBTdGFuZGFyZCBjbGFzc2VzLiBMaWJyYXJ5IHdyaXRlcnMgZG9uJ3QgbG9zZSBhbnkgZXhwcmVzc2l2ZSBwb3dlciwKYW5kIGNhbiBzdGlsbCBvZmZlciBleHRlbnNpb25zIGJlY2F1c2UgYWRkaXRpb25hbCB0ZW1wbGF0ZSBwYXJhbWV0ZXJzCm1heSBiZSBwcm92aWRlZCBieSBhIG5vbi1TdGFuZGFyZCBpbXBsZW1lbnRhdGlvbiBjbGFzczo8L3A+CjxwcmU+IAogICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQWxsb2NhdG9yID0gYWxsb2NhdG9yJmx0O1QmZ3Q7LCBpbnQgTiA9IDEmZ3Q7CiAgIGNsYXNzIF9fdmVjdG9yCiAgIHsgLi4uIH07CiAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBBbGxvY2F0b3IgPSBhbGxvY2F0b3ImbHQ7VCZndDsgJmd0OwogICBjbGFzcyB2ZWN0b3I6IHB1YmxpYyBfX3ZlY3RvciZsdDtULCBBbGxvY2F0b3ImZ3Q7CiAgIHsgLi4uIH07CjwvcHJlPgoKPC9ibG9ja3F1b3RlPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgYSBuZXcgc3ViY2xhdXNlIFtwcmVzdW1hYmx5IDE3LjQuNC45XSBmb2xsb3dpbmcgMTcuNC40LjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIucmVzLm9uLmV4Y2VwdGlvbi5oYW5kbGluZyI+IFtsaWIucmVzLm9uLmV4Y2VwdGlvbi5oYW5kbGluZ108L2E+OjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjE3LjQuNC45IFRlbXBsYXRlIFBhcmFtZXRlcnM8L3A+IDxwPkEgc3BlY2lhbGl6YXRpb24gb2YgYQogIHRlbXBsYXRlIGNsYXNzIGRlc2NyaWJlZCBpbiB0aGUgQysrIFN0YW5kYXJkIExpYnJhcnkgYmVoYXZlcyB0aGUKICBzYW1lIGFzIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBkZWNsYXJlcyBubyBhZGRpdGlvbmFsIHRlbXBsYXRlCiAgcGFyYW1ldGVycy48L3A+IDxwPkZvb3Rub3RlOiBBZGRpdGlvbmFsIHRlbXBsYXRlIHBhcmFtZXRlcnMgd2l0aAogIGRlZmF1bHQgdmFsdWVzIGFyZSB0aHVzIHBlcm1pdHRlZC48L3A+CjwvYmxvY2txdW90ZT4KCjxwPkFkZCAidGVtcGxhdGUgcGFyYW1ldGVycyIgdG8gdGhlIGxpc3Qgb2Ygc3ViY2xhdXNlcyBhdAp0aGUgZW5kIG9mIDE3LjQuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5jb25mb3JtaW5nIj4gW2xpYi5jb25mb3JtaW5nXTwvYT4gcGFyYWdyYXBoIDEuPC9wPgoKPHA+PGk+W0tvbmE6IFRoZSBMV0cgYWdyZWVkIHRoZSBzdGFuZGFyZCBuZWVkcyBjbGFyaWZpY2F0aW9uLiBBZnRlcgpkaXNjdXNzaW9uIHdpdGggSm9obiBTcGljZXIsIGl0IHNlZW1zIGFkZGVkIHRlbXBsYXRlIHBhcmFtZXRlcnMgY2FuIGJlCmRldGVjdGVkIGJ5IGEgcHJvZ3JhbSB1c2luZyB0ZW1wbGF0ZS10ZW1wbGF0ZSBwYXJhbWV0ZXJzLiBBIHN0cmF3IHZvdGUKLSAic2hvdWxkIGltcGxlbWVudG9ycyBiZSBhbGxvd2VkIHRvIGFkZCB0ZW1wbGF0ZQpwYXJhbWV0ZXJzPyIgZm91bmQgbm8gY29uc2Vuc3VzIDsgNSAtIHllcywgNyAtIG5vLl08L2k+PC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpUaGVyZSBpcyBubyBhbWJpZ3VpdHk7IHRoZSBzdGFuZGFyZCBpcyBjbGVhciBhcyB3cml0dGVuLiAgTGlicmFyeQppbXBsZW1lbnRvcnMgYXJlIG5vdCBwZXJtaXR0ZWQgdG8gYWRkIHRlbXBsYXRlIHBhcmFtZXRlcnMgdG8gc3RhbmRhcmQKbGlicmFyeSBjbGFzc2VzLiAgVGhpcyBkb2VzIG5vdCBmYWxsIHVuZGVyIHRoZSAiYXMgaWYiIHJ1bGUsCnNvIGl0IHdvdWxkIGJlIHBlcm1pdHRlZCBvbmx5IGlmIHRoZSBzdGFuZGFyZCBnYXZlIGV4cGxpY2l0IGxpY2Vuc2UKZm9yIGltcGxlbWVudG9ycyB0byBkbyB0aGlzLiAgVGhpcyB3b3VsZCByZXF1aXJlIGEgY2hhbmdlIGluIHRoZSAKc3RhbmRhcmQuCjwvcD4KCjxwPgpUaGUgTFdHIGRlY2lkZWQgYWdhaW5zdCBtYWtpbmcgdGhpcyBjaGFuZ2UsIGJlY2F1c2UgaXQgd291bGQgYnJlYWsKdXNlciBjb2RlIGludm9sdmluZyB0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIG9yIHNwZWNpYWxpemF0aW9ucwpvZiBzdGFuZGFyZCBsaWJyYXJ5IGNsYXNzIHRlbXBsYXRlcy4KPC9wPgo8aHI+CjxhIG5hbWU9Ijk1Ij48aDM+OTUuJm5ic3A7TWVtYmVycyBhZGRlZCBieSB0aGUgaW1wbGVtZW50YXRpb248L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxNy40LjQuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5tZW1iZXIuZnVuY3Rpb25zIj4gW2xpYi5tZW1iZXIuZnVuY3Rpb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBRk5PUiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs3IE9jdCAxOTk4PC9wPgo8cD5JbiAxNy4zLjQuNC8yIHZzIDE3LjMuNC43LzAgdGhlcmUgaXMgYSBob2xlOyBhbiBpbXBsZW1lbnRhdGlvbiBjb3VsZCBhZGQgdmlydHVhbAptZW1iZXJzIGEgYmFzZSBjbGFzcyBhbmQgYnJlYWsgdXNlciBkZXJpdmVkIGNsYXNzZXMuPC9wPgoKPHA+RXhhbXBsZTogPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT4vLyBpbXBsZW1lbnRhdGlvbiBjb2RlOgpzdHJ1Y3QgX0Jhc2UgeyAvLyBfQmFzZSBpcyBpbiB0aGUgaW1wbGVtZW50ZXIgbmFtZXNwYWNlCiAgICAgICAgdmlydHVhbCB2b2lkIGZvbyAoKTsKfTsKY2xhc3MgdmVjdG9yIDogX0Jhc2UgLy8gZGVyaXZpbmcgZnJvbSBhIGNsYXNzIGlzIGFsbG93ZWQKeyAuLi4gfTsKCi8vIHVzZXIgY29kZToKY2xhc3MgdmVjdG9yX2NoZWNraW5nIDogcHVibGljIHZlY3RvciAKewogICAgICAgIHZvaWQgZm9vICgpOyAvLyBkb24ndCB3YW50IHRvIG92ZXJyaWRlIF9CYXNlOjpmb28gKCkgYXMgdGhlIAogICAgICAgICAgICAgICAgICAgICAvLyB1c2VyIGRvZXNuJ3Qga25vdyBhYm91dCBfQmFzZTo6Zm9vICgpCn07PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DbGFyaWZ5IHRoZSB3b3JkaW5nIHRvIG1ha2UgdGhlIGV4YW1wbGUgaWxsZWdhbC48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGlzIGlzIG5vdCBhIGRlZmVjdCBpbiB0aGUgU3RhbmRhcmQuJm5ic3A7IFRoZSBleGFtcGxlIGlzIGFscmVhZHkKaWxsZWdhbC4mbmJzcDsgU2VlIDE3LjQuNC40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLm1lbWJlci5mdW5jdGlvbnMiPiBbbGliLm1lbWJlci5mdW5jdGlvbnNdPC9hPiBwYXJhZ3JhcGggMi48L3A+Cjxocj4KPGEgbmFtZT0iOTciPjxoMz45Ny4mbmJzcDtJbnNlcnQgaW5jb25zaXN0ZW50IGRlZmluaXRpb248L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lcnMiPiBbbGliLmNvbnRhaW5lcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FGTk9SJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzcgT2N0IDE5OTg8L3A+CjxwPjx0dD5pbnNlcnQoaXRlcmF0b3IsIGNvbnN0IHZhbHVlX3R5cGUmYW1wOyk8L3R0PiBpcyBkZWZpbmVkIGJvdGggb24Kc2VxdWVuY2VzIGFuZCBvbiBzZXQsIHdpdGggdW5yZWxhdGVkIHNlbWFudGljczogaW5zZXJ0IGhlcmUgKGluCnNlcXVlbmNlcyksIGFuZCBpbnNlcnQgd2l0aCBoaW50IChpbiBhc3NvY2lhdGl2ZSBjb250YWluZXJzKS4gVGhleQpzaG91bGQgaGF2ZSBkaWZmZXJlbnQgbmFtZXMgKEIuUy4gc2F5czogZG8gbm90IGFidXNlIG92ZXJsb2FkaW5nKS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgaXMgbm90IGEgZGVmZWN0IGluIHRoZSBTdGFuZGFyZC4gSXQgaXMgYSBnZW5ldGljIG1pc2ZvcnR1bmUgb2YKdGhlIGRlc2lnbiwgZm9yIGJldHRlciBvciBmb3Igd29yc2UuPC9wPgo8aHI+CjxhIG5hbWU9Ijk5Ij48aDM+OTkuJm5ic3A7UmV2ZXJzZV9pdGVyYXRvciBjb21wYXJpc29ucyBjb21wbGV0ZWx5IHdyb25nPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjQuNC4xLjMuMTMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLnJldmVyc2UuaXRlci5vcD09Ij4gW2xpYi5yZXZlcnNlLml0ZXIub3A9PV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QUZOT1ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NyBPY3QgMTk5ODwvcD4KPHA+VGhlICZsdDssICZndDssICZsdDs9LCAmZ3Q7PSBjb21wYXJpc29uIG9wZXJhdG9yIGFyZSB3cm9uZzogdGhleQpyZXR1cm4gdGhlIG9wcG9zaXRlIG9mIHdoYXQgdGhleSBzaG91bGQuPC9wPgoKPHA+Tm90ZTogc2FtZSBwcm9ibGVtIGluIENEMiwgdGhlc2Ugd2VyZSBub3QgZXZlbiBkZWZpbmVkIGluIENEMS4gIFNHSQpTVEwgY29kZSBpcyBjb3JyZWN0OyB0aGlzIHByb2JsZW0gaXMga25vd24gc2luY2UgdGhlIE1vcnJpc3Rvd24KbWVldGluZyBidXQgdGhlcmUgaXQgd2FzIHRvbyBsYXRlPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGlzIGlzIG5vdCBhIGRlZmVjdCBpbiB0aGUgU3RhbmRhcmQuIEEgY2FyZWZ1bCByZWFkaW5nIHNob3dzIHRoZSBTdGFuZGFyZCBpcyBjb3JyZWN0CmFzIHdyaXR0ZW4uIEEgcmV2aWV3IG9mIHNldmVyYWwgaW1wbGVtZW50YXRpb25zIHNob3cgdGhhdCB0aGV5IGltcGxlbWVudApleGFjdGx5IHdoYXQgdGhlIFN0YW5kYXJkIHNheXMuPC9wPgo8aHI+CjxhIG5hbWU9IjEwMCI+PGgzPjEwMC4mbmJzcDtJbnNlcnQgaXRlcmF0b3JzL29zdHJlYW1faXRlcmF0b3JzIG92ZXJjb25zdHJhaW5lZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI0LjQuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaW5zZXJ0Lml0ZXJhdG9ycyI+IFtsaWIuaW5zZXJ0Lml0ZXJhdG9yc108L2E+LCAyNC41LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLm9zdHJlYW1idWYuaXRlcmF0b3IiPiBbbGliLm9zdHJlYW1idWYuaXRlcmF0b3JdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FGTk9SJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzcgT2N0IDE5OTg8L3A+CjxwPk92ZXJzcGVjaWZpZWQgRm9yIGFuIGluc2VydCBpdGVyYXRvciBpdCwgdGhlIGV4cHJlc3Npb24gKml0IGlzCnJlcXVpcmVkIHRvIHJldHVybiBhIHJlZmVyZW5jZSB0byBpdC4gVGhpcyBpcyBhIHNpbXBsZSBwb3NzaWJsZQppbXBsZW1lbnRhdGlvbiwgYnV0IGFzIHRoZSBTR0kgU1RMIGRvY3VtZW50YXRpb24gc2F5cywgbm90IHRoZSBvbmx5Cm9uZSwgYW5kIHRoZSB1c2VyIHNob3VsZCBub3QgYXNzdW1lIHRoYXQgdGhpcyBpcyB0aGUgY2FzZS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgYmVsaWV2ZXMgdGhpcyBjYXVzZXMgbm8gaGFybSBhbmQgaXMgbm90IGEgZGVmZWN0IGluIHRoZQpzdGFuZGFyZC4gVGhlIG9ubHkgZXhhbXBsZSBhbnlvbmUgY291bGQgY29tZSB1cCB3aXRoIGNhdXNlZCBzb21lCmluY29ycmVjdCBjb2RlIHRvIHdvcmssIHJhdGhlciB0aGFuIHRoZSBvdGhlciB3YXkgYXJvdW5kLjwvcD4KPGhyPgo8YSBuYW1lPSIxMDEiPjxoMz4xMDEuJm5ic3A7Tm8gd2F5IHRvIGZyZWUgc3RvcmFnZSBmb3IgdmVjdG9yIGFuZCBkZXF1ZTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5hZGFwdG9ycyI+IFtsaWIuY29udGFpbmVyLmFkYXB0b3JzXTwvYT4sIDIzLjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmFycmF5Ij4gW2xpYi5hcnJheV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QUZOT1ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NyBPY3QgMTk5ODwvcD4KPHA+UmVzZXJ2ZSBjYW4gbm90IGZyZWUgc3RvcmFnZSwgdW5saWtlIHN0cmluZzo6cmVzZXJ2ZTwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhpcyBpcyBub3QgYSBkZWZlY3QgaW4gdGhlIFN0YW5kYXJkLiBUaGUgTFdHIGhhcyBjb25zaWRlcmVkIHRoaXMKaXNzdWUgaW4gdGhlIHBhc3QgYW5kIHNlZXMgbm8gbmVlZCB0byBjaGFuZ2UgdGhlIFN0YW5kYXJkLiBEZXF1ZSBoYXMKbm8gcmVzZXJ2ZSgpIG1lbWJlciBmdW5jdGlvbi4gRm9yIHZlY3Rvciwgc2hyaW5rLXRvLWZpdCBjYW4gYmUKZXhwcmVzc2VkIGluIGEgc2luZ2xlIGxpbmUgb2YgY29kZSAod2hlcmUgPHR0PnY8L3R0PiBpcwo8dHQ+dmVjdG9yJmx0O1QmZ3Q7PC90dD4pOgo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48dHQ+dmVjdG9yJmx0O1QmZ3Q7KHYpLnN3YXAodik7Jm5ic3A7IC8vIHNocmluay10by1maXQgdjwvdHQ+PC9wPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMTAyIj48aDM+MTAyLiZuYnNwO0J1ZyBpbiBpbnNlcnQgcmFuZ2UgaW4gYXNzb2NpYXRpdmUgY29udGFpbmVyczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmFzc29jaWF0aXZlLnJlcW10cyI+IFtsaWIuYXNzb2NpYXRpdmUucmVxbXRzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEdXAiPkR1cDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBRk5PUiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs3IE9jdCAxOTk4PC9wPgo8cD5UYWJsZSA2OSBvZiBDb250YWluZXJzIHNheSB0aGF0IGEuaW5zZXJ0KGksaikgaXMgbGluZWFyIGlmIFtpLCBqKSBpcyBvcmRlcmVkLiBJdCBzZWVtcwppbXBvc3NpYmxlIHRvIGltcGxlbWVudCwgYXMgaXQgbWVhbnMgdGhhdCBpZiBbaSwgaikgPSBbeF0sIGluc2VydCBpbiBhbiBhc3NvY2lhdGl2ZQpjb250YWluZXIgaXMgTygxKSE8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Titsb2cgKHNpemUoKSkgaWYgW2ksaikgaXMgc29ydGVkIGFjY29yZGluZyB0byB2YWx1ZV9jb21wKCk8L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5TdWJzdW1lZCBieSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjY0Ij4yNjQ8L2E+LjwvcD4KPGhyPgo8YSBuYW1lPSIxMDQiPjxoMz4xMDQuJm5ic3A7RGVzY3JpcHRpb24gb2YgYmFzaWNfc3RyaW5nOjpvcGVyYXRvcltdIGlzIHVuY2xlYXI8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4zLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmcuYWNjZXNzIj4gW2xpYi5zdHJpbmcuYWNjZXNzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBRk5PUiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs3IE9jdCAxOTk4PC9wPgo8cD5JdCBpcyBub3QgY2xlYXIgdGhhdCB1bmRlZmluZWQgYmVoYXZpb3IgYXBwbGllcyB3aGVuIHBvcyA9PSBzaXplICgpCmZvciB0aGUgbm9uIGNvbnN0IHZlcnNpb24uPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJld3JpdGUgYXM6IE90aGVyd2lzZSwgaWYgcG9zICZndDsgc2l6ZSAoKSBvciBwb3MgPT0gc2l6ZSAoKSBhbmQKdGhlIG5vbi1jb25zdCB2ZXJzaW9uIGlzIHVzZWQsIHRoZW4gdGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgU3RhbmRhcmQgaXMgY29ycmVjdC4gVGhlIHByb3Bvc2VkIHJlc29sdXRpb24gYWxyZWFkeSBhcHBlYXJzIGluCnRoZSBTdGFuZGFyZC48L3A+Cjxocj4KPGEgbmFtZT0iMTA1Ij48aDM+MTA1LiZuYnNwO2ZzdHJlYW0gY3RvcnMgYXJndW1lbnQgdHlwZXMgZGVzaXJlZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZpbGUuc3RyZWFtcyI+IFtsaWIuZmlsZS5zdHJlYW1zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNGdXR1cmUiPkZ1dHVyZTwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBRk5PUiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs3IE9jdCAxOTk4PC9wPgo8cD5mc3RyZWFtIGN0b3JzIHRha2UgYSBjb25zdCBjaGFyKiBpbnN0ZWFkIG9mIHN0cmluZy48YnI+CmZzdHJlYW0gY3RvcnMgY2FuJ3QgdGFrZSB3Y2hhcl90PC9wPgoKPHA+QW4gZXh0ZW5zaW9uIHRvIGFkZCBhIGNvbnN0IHdjaGFyX3QqIHRvIGZzdHJlYW0gd291bGQgbWFrZSB0aGUKaW1wbGVtZW50YXRpb24gbm9uIGNvbmZvcm1pbmcuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGlzIGlzIG5vdCBhIGRlZmVjdCBpbiB0aGUgU3RhbmRhcmQuIEl0IG1pZ2h0IGJlIGFuCmludGVyZXN0aW5nIGV4dGVuc2lvbiBmb3IgdGhlIG5leHQgU3RhbmRhcmQuIDwvcD4KPGhyPgo8YSBuYW1lPSIxMDciPjxoMz4xMDcuJm5ic3A7VmFsYXJyYXkgY29uc3RydWN0b3IgaXMgc3RyYW5nZTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI2LjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5jb21wbGV4Ij4gW2xpYi5jb21wbGV4XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBRk5PUiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs3IE9jdCAxOTk4PC9wPgo8cD5UaGUgb3JkZXIgb2YgdGhlIGFyZ3VtZW50cyBpcyAoZWxlbSwgc2l6ZSkgaW5zdGVhZCBvZiB0aGUgbm9ybWFsCihzaXplLCBlbGVtKSBpbiB0aGUgcmVzdCBvZiB0aGUgbGlicmFyeS4gU2luY2UgZWxlbSBvZnRlbiBoYXMgYW4KaW50ZWdyYWwgb3IgZmxvYXRpbmcgcG9pbnQgdHlwZSwgYm90aCB0eXBlcyBhcmUgY29udmVydGlibGUgdG8gZWFjaApvdGhlciBhbmQgcmV2ZXJzaW5nIHRoZW0gbGVhZHMgdG8gYSB3ZWxsIGZvcm1lZCBwcm9ncmFtLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbnZlcnRpbmcgdGhlIGFyZ3VtZW50cyBjb3VsZCBzaWxlbnRseSBicmVhayBwcm9ncmFtcy4gSW50cm9kdWNlCnRoZSB0d28gc2lnbmF0dXJlcyAoY29uc3QgVCZhbXA7LCBzaXplX3QpIGFuZCAoc2l6ZV90LCBjb25zdCBUJmFtcDspLApidXQgbWFrZSB0aGUgb25lIHdlIGRvIG5vdCB3YW50IHByaXZhdGUgc28gZXJyb3JzIHJlc3VsdCBpbiBhCmRpYWdub3NlZCBhY2Nlc3MgdmlvbGF0aW9uLiBUaGlzIHRlY2huaXF1ZSBjYW4gYWxzbyBiZSBhcHBsaWVkIHRvIFNUTApjb250YWluZXJzLjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgYmVsaWV2ZXMgdGhhdCB3aGlsZSB0aGUgb3JkZXIgb2YgYXJndW1lbnRzIGlzIHVuZm9ydHVuYXRlLAppdCBkb2VzIG5vdCBjb25zdGl0dXRlIGEgZGVmZWN0IGluIHRoZSBzdGFuZGFyZC4gVGhlIExXRyBiZWxpZXZlcyB0aGF0CnRoZSBwcm9wb3NlZCBzb2x1dGlvbiB3aWxsIG5vdCB3b3JrIGZvciB2YWxhcnJheSZsdDtzaXplX3QmZ3Q7IGFuZApwZXJoYXBzIG90aGVyIGNhc2VzLjwvcD4KPGhyPgo8YSBuYW1lPSIxMTEiPjxoMz4xMTEuJm5ic3A7aXN0cmVhbWJ1Zl9pdGVyYXRvcjo6ZXF1YWwgb3ZlcnNwZWNpZmllZCwgaW5lZmZpY2llbnQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC41LjMuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaXN0cmVhbWJ1Zi5pdGVyYXRvcjo6ZXF1YWwiPiBbbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6OmVxdWFsXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNGdXR1cmUiPkZ1dHVyZTwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTUgT2N0IDE5OTg8L3A+CjxwPlRoZSBtZW1iZXIgaXN0cmVhbWJ1Zl9pdGVyYXRvciZsdDsmZ3Q7OjplcXVhbCBpcyBzcGVjaWZpZWQgdG8gYmUKdW5uZWNlc3NhcmlseSBpbmVmZmljaWVudC4gV2hpbGUgdGhpcyBkb2VzIG5vdCBhZmZlY3QgdGhlIGVmZmljaWVuY3kKb2YgY29uZm9ybWluZyBpbXBsZW1lbnRhdGlvbnMgb2YgaW9zdHJlYW1zLCBiZWNhdXNlIHRoZXkgY2FuCiJyZWFjaCBpbnRvIiB0aGUgaXRlcmF0b3JzIGFuZCBieXBhc3MgdGhpcyBmdW5jdGlvbiwgaXQgZG9lcwphZmZlY3QgdXNlcnMgd2hvIHVzZSBpc3RyZWFtYnVmX2l0ZXJhdG9ycy4gPC9wPgoKPHA+VGhlIGluZWZmaWNpZW5jeSByZXN1bHRzIGZyb20gYSB0b28tc2NydXB1bG91cyBkZWZpbml0aW9uLCB3aGljaApyZXF1aXJlcyBhICJ0cnVlIiByZXN1bHQgaWYgbmVpdGhlciBpdGVyYXRvciBpcyBhdCBlb2YuIEluCnByYWN0aWNlIHRoZXNlIGl0ZXJhdG9ycyBjYW4gb25seSB1c2VmdWxseSBiZSBjb21wYXJlZCB3aXRoIHRoZQoiZW9mIiB2YWx1ZSwgc28gdGhlIGV4dHJhIHRlc3QgaW1wbGllZCBwcm92aWRlcyBubyBiZW5lZml0LApidXQgc2xvd3MgZG93biB1c2VycycgY29kZS4gPC9wPgoKPHA+VGhlIHNvbHV0aW9uIGlzIHRvIHdlYWtlbiB0aGUgcmVxdWlyZW1lbnQgb24gdGhlIGZ1bmN0aW9uIHRvIHJldHVybgp0cnVlIG9ubHkgaWYgYm90aCBpdGVyYXRvcnMgYXJlIGF0IGVvZi4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlcGxhY2UgMjQuNS4zLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6OmVxdWFsIj4gW2xpYi5pc3RyZWFtYnVmLml0ZXJhdG9yOjplcXVhbF08L2E+LApwYXJhZ3JhcGggMSwgPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+LTEtIFJldHVybnM6IHRydWUgaWYgYW5kIG9ubHkgaWYgYm90aCBpdGVyYXRvcnMgYXJlIGF0IGVuZC1vZi1zdHJlYW0sIG9yIG5laXRoZXIgaXMgYXQKICBlbmQtb2Ytc3RyZWFtLCByZWdhcmRsZXNzIG9mIHdoYXQgc3RyZWFtYnVmIG9iamVjdCB0aGV5IHVzZS4gPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD53aXRoPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+LTEtIFJldHVybnM6IHRydWUgaWYgYW5kIG9ubHkgaWYgYm90aCBpdGVyYXRvcnMgYXJlIGF0CiAgZW5kLW9mLXN0cmVhbSwgcmVnYXJkbGVzcyBvZiB3aGF0IHN0cmVhbWJ1ZiBvYmplY3QgdGhleSB1c2UuIDwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkl0IGlzIG5vdCBjbGVhciB0aGF0IHRoaXMgaXMgYSBnZW51aW5lIGRlZmVjdC4gIEFkZGl0aW9uYWxseSwgdGhlCkxXRyB3YXMgcmVsdWN0YW50IHRvIG1ha2UgYSBjaGFuZ2UgdGhhdCB3b3VsZCByZXN1bHQgaW4gCm9wZXJhdG9yPT0gbm90IGJlaW5nIGEgZXF1aXZhbGVuY2UgcmVsYXRpb24uICBPbmUgY29uc2VxdWVuY2Ugb2YKdGhpcyBjaGFuZ2UgaXMgdGhhdCBhbiBhbGdvcml0aG0gdGhhdCdzIHBhc3NlZCB0aGUgcmFuZ2UgW2ksIGkpCndvdWxkIG5vIGxvbmdlciB0cmVhdCBpdCBhcyBhbiBlbXB0eSByYW5nZS48L3A+Cjxocj4KPGEgbmFtZT0iMTEzIj48aDM+MTEzLiZuYnNwO01pc3NpbmcvZXh0cmEgaW9zdHJlYW0gc3luYyBzZW1hbnRpY3M8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbSI+IFtsaWIuaXN0cmVhbV08L2E+LCAyNy42LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbS51bmZvcm1hdHRlZCI+IFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7U3RldmUgQ2xhbWFnZSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxMyBPY3QgMTk5ODwvcD4KPHA+SW4gMjcuNi4xLjEsIGNsYXNzIGJhc2ljX2lzdHJlYW0gaGFzIGEgbWVtYmVyIGZ1bmN0aW9uIHN5bmMsIGRlc2NyaWJlZCBpbiAyNy42LjEuMywKcGFyYWdyYXBoIDM2LiA8L3A+Cgo8cD5Gb2xsb3dpbmcgdGhlIGNoYWluIG9mIGRlZmluaXRpb25zLCBJIGZpbmQgdGhhdCB0aGUgdmFyaW91cyBzeW5jIGZ1bmN0aW9ucyBoYXZlIGRlZmluZWQKc2VtYW50aWNzIGZvciBvdXRwdXQgc3RyZWFtcywgYnV0IG5vIHNlbWFudGljcyBmb3IgaW5wdXQgc3RyZWFtcy4gT24gdGhlIG90aGVyIGhhbmQsCmJhc2ljX29zdHJlYW0gaGFzIG5vIHN5bmMgZnVuY3Rpb24uIDwvcD4KCjxwPlRoZSBzeW5jIGZ1bmN0aW9uIHNob3VsZCBhdCBtaW5pbXVtIGJlIGFkZGVkIHRvIGJhc2ljX29zdHJlYW0sIGZvciBpbnRlcm5hbApjb25zaXN0ZW5jeS4gPC9wPgoKPHA+QSBsYXJnZXIgcXVlc3Rpb24gaXMgd2hldGhlciBzeW5jIHNob3VsZCBoYXZlIGFzc2lnbmVkIHNlbWFudGljcyBmb3IgaW5wdXQgc3RyZWFtcy4gPC9wPgoKPHA+Q2xhc3NpYyBpb3N0cmVhbXMgc2FpZCBzdHJlYW1idWY6OnN5bmMgZmx1c2hlcyBwZW5kaW5nIG91dHB1dCBhbmQgYXR0ZW1wdHMgdG8gcmV0dXJuCnVucmVhZCBpbnB1dCBjaGFyYWN0ZXJzIHRvIHRoZSBzb3VyY2UuIEl0IGlzIGEgcHJvdGVjdGVkIG1lbWJlciBmdW5jdGlvbi4gVGhlIGZpbGVidWYKdmVyc2lvbiAod2hpY2ggaXMgcHVibGljKSBoYXMgdGhhdCBiZWhhdmlvciAoaXQgYmFja3MgdXAgdGhlIHJlYWQgcG9pbnRlcikuIENsYXNzCnN0cnN0cmVhbWJ1ZiBkb2VzIG5vdCBvdmVycmlkZSBzdHJlYW1idWY6OnN5bmMsIGFuZCBzbyBzeW5jIGNhbid0IGJlIGNhbGxlZCBvbiBhCnN0cnN0cmVhbS4gPC9wPgoKPHA+SWYgd2UgY2FuIGFkZCBjb3JyZXNwb25kaW5nIHNlbWFudGljcyB0byB0aGUgdmFyaW91cyBzeW5jIGZ1bmN0aW9ucywgd2Ugc2hvdWxkLiBJZiBub3QsCndlIHNob3VsZCByZW1vdmUgc3luYyBmcm9tIGJhc2ljX2lzdHJlYW0uPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5BIHN5bmMgZnVuY3Rpb24gaXMgbm90IG5lZWRlZCBpbiBiYXNpY19vc3RyZWFtIGJlY2F1c2UgdGhlIGZsdXNoIGZ1bmN0aW9uIHByb3ZpZGVzIHRoZQpkZXNpcmVkIGZ1bmN0aW9uYWxpdHkuPC9wPgoKPHA+QXMgZm9yIHRoZSBvdGhlciBwb2ludHMsIHRoZSBMV0cgZmluZHMgdGhlIHN0YW5kYXJkIGNvcnJlY3QgYXMgd3JpdHRlbi48L3A+Cjxocj4KPGEgbmFtZT0iMTE2Ij48aDM+MTE2LiZuYnNwO2JpdHNldCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgd2l0aCBhIGNvbnN0IGNoYXIqPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMy41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIudGVtcGxhdGUuYml0c2V0Ij4gW2xpYi50ZW1wbGF0ZS5iaXRzZXRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0Z1dHVyZSI+RnV0dXJlPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0p1ZHkgV2FyZCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IE5vdiAxOTk4PC9wPgo8cD5UaGUgZm9sbG93aW5nIGNvZGUgZG9lcyBub3QgY29tcGlsZSB3aXRoIHRoZSBFREcgY29tcGlsZXI6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT4jaW5jbHVkZSAmbHQ7Yml0c2V0Jmd0Owp1c2luZyBuYW1lc3BhY2Ugc3RkOwpiaXRzZXQmbHQ7MzImZ3Q7IGIoIjExMTExMTExMSIpOzwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD5JZiB5b3UgY2FzdCB0aGUgY3RvciBhcmd1bWVudCB0byBhIHN0cmluZywgaS5lLjo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPmJpdHNldCZsdDszMiZndDsgYihzdHJpbmcoIjExMTExMTExMSIpKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+dGhlbiBpdCB3aWxsIGNvbXBpbGUuIFRoZSByZWFzb24gaXMgdGhhdCBiaXRzZXQgaGFzIHRoZSBmb2xsb3dpbmcgdGVtcGxhdGl6ZWQKY29uc3RydWN0b3I6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yJmd0OwpleHBsaWNpdCBiaXRzZXQgKGNvbnN0IGJhc2ljX3N0cmluZyZsdDtjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3ImZ3Q7JmFtcDsgc3RyLCAuLi4pOzwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD5BY2NvcmRpbmcgdG8gdGhlIGNvbXBpbGVyIHZlbmRvciwgU3RldmUgQWRhbWN5ayBhdCBFREcsIHRoZSB1c2VyCmNhbm5vdCBwYXNzIHRoaXMgdGVtcGxhdGUgY29uc3RydWN0b3IgYSA8dHQ+Y29uc3QgY2hhcio8L3R0PiBhbmQKZXhwZWN0IGEgY29udmVyc2lvbiB0byA8dHQ+YmFzaWNfc3RyaW5nPC90dD4uICBUaGUgcmVhc29uIGlzCiJXaGVuIHlvdSBoYXZlIGEgdGVtcGxhdGUgY29uc3RydWN0b3IsIGl0IGNhbiBnZXQgdXNlZCBpbgpjb250ZXh0cyB3aGVyZSB0eXBlIGRlZHVjdGlvbiBjYW4gYmUgZG9uZS4gVHlwZSBkZWR1Y3Rpb24gYmFzaWNhbGx5CmNvbWVzIHVwIHdpdGggZXhhY3QgbWF0Y2hlcywgbm90IG9uZXMgaW52b2x2aW5nIGNvbnZlcnNpb25zLiIKPC9wPgoKPHA+SSBkb24ndCB0aGluayB0aGUgaW50ZW50aW9uIHdoZW4gdGhpcyBjb25zdHJ1Y3RvciBiZWNhbWUKdGVtcGxhdGl6ZWQgd2FzIGZvciBjb25zdHJ1Y3Rpb24gZnJvbSBhIDx0dD5jb25zdCBjaGFyKjwvdHQ+IHRvIG5vCmxvbmdlciB3b3JrLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgdG8gMjMuMy41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIudGVtcGxhdGUuYml0c2V0Ij4gW2xpYi50ZW1wbGF0ZS5iaXRzZXRdPC9hPiBhIGJpdHNldCBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbjwvcD4KCjxibG9ja3F1b3RlPgogIDxwcmU+ZXhwbGljaXQgYml0c2V0KGNvbnN0IGNoYXIqKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+YW5kIGluIFNlY3Rpb24gMjMuMy41LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5iaXRzZXQuY29ucyI+IFtsaWIuYml0c2V0LmNvbnNdPC9hPiBhZGQ6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5leHBsaWNpdCBiaXRzZXQoY29uc3QgY2hhciogc3RyKTs8L3ByZT4KICA8cD5FZmZlY3RzOiA8YnI+CiAgJm5ic3A7Jm5ic3A7Jm5ic3A7IENhbGxzIDx0dD5iaXRzZXQoKHN0cmluZykgc3RyLCAwLCBzdHJpbmc6Om5wb3MpOzwvdHQ+PC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5BbHRob3VnaCB0aGUgcHJvYmxlbSBpcyByZWFsLCB0aGUgc3RhbmRhcmQgaXMgZGVzaWduZWQgdGhhdCB3YXkgc28KaXQgaXMgbm90IGEgZGVmZWN0LiAgRWR1Y2F0aW9uIGlzIHRoZSBpbW1lZGlhdGUgd29ya2Fyb3VuZC4gQSBmdXR1cmUKc3RhbmRhcmQgbWF5IHdpc2ggdG8gY29uc2lkZXIgdGhlIFByb3Bvc2VkIFJlc29sdXRpb24gYXMgYW4KZXh0ZW5zaW9uLjwvcD4KPGhyPgo8YSBuYW1lPSIxMjEiPjxoMz4xMjEuJm5ic3A7RGV0YWlsZWQgZGVmaW5pdGlvbiBmb3IgY3R5cGUmbHQ7d2NoYXJfdCZndDsgc3BlY2lhbGl6YXRpb248L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4xLjEuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNhdGVnb3J5Ij4gW2xpYi5sb2NhbGUuY2F0ZWdvcnldPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0p1ZHkgV2FyZCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBEZWMgMTk5ODwvcD4KPHA+U2VjdGlvbiAyMi4xLjEuMS4xIGhhcyB0aGUgZm9sbG93aW5nIGxpc3RlZCBpbiBUYWJsZSA1MTogY3R5cGUmbHQ7Y2hhciZndDsgLApjdHlwZSZsdDt3Y2hhcl90Jmd0Oy4gPC9wPgoKPHA+QWxzbyBTZWN0aW9uIDIyLjIuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmN0eXBlIj4gW2xpYi5sb2NhbGUuY3R5cGVdPC9hPiBzYXlzOiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5UaGUgaW5zdGFudGlhdGlvbnMgcmVxdWlyZWQgaW4gVGFibGUgNTEgKDIyLjEuMS4xLjEpIG5hbWVseSBjdHlwZSZsdDtjaGFyJmd0OyBhbmQKICBjdHlwZSZsdDt3Y2hhcl90Jmd0OyAsIGltcGxlbWVudCBjaGFyYWN0ZXIgY2xhc3NpbmcgYXBwcm9wcmlhdGUgdG8gdGhlIGltcGxlbWVudGF0aW9uJ3MKICBuYXRpdmUgY2hhcmFjdGVyIHNldC4gPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5Ib3dldmVyLCBTZWN0aW9uIDIyLjIuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQuY3R5cGUuc3BlY2lhbCI+IFtsaWIuZmFjZXQuY3R5cGUuc3BlY2lhbF08L2E+Cm9ubHkgaGFzIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGN0eXBlJmx0O2NoYXImZ3Q7IHNwZWNpYWxpemF0aW9uLCBub3QgdGhlCmN0eXBlJmx0O3djaGFyX3QmZ3Q7IHNwZWNpYWxpemF0aW9uLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRoZSBjdHlwZSZsdDt3Y2hhcl90Jmd0OyBkZXRhaWxlZCBjbGFzcyBkZXNjcmlwdGlvbiB0byBTZWN0aW9uIAoyMi4yLjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0LmN0eXBlLnNwZWNpYWwiPiBbbGliLmZhY2V0LmN0eXBlLnNwZWNpYWxdPC9hPi4gPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+U3BlY2lhbGl6YXRpb24gZm9yIHdjaGFyX3QgaXMgbm90IG5lZWRlZCBzaW5jZSB0aGUgZGVmYXVsdCBpcyBhY2NlcHRhYmxlLjwvcD4KPGhyPgo8YSBuYW1lPSIxMjgiPjxoMz4xMjguJm5ic3A7TmVlZCBvcGVuX21vZGUoKSBmdW5jdGlvbiBmb3IgZmlsZSBzdHJlYW0sIHN0cmluZyBzdHJlYW1zLCBmaWxlIGJ1ZmZlcnMsIGFuZCBzdHJpbmcmbmJzcDsgYnVmZmVyczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmluZy5zdHJlYW1zIj4gW2xpYi5zdHJpbmcuc3RyZWFtc108L2E+LCAyNy44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5maWxlLnN0cmVhbXMiPiBbbGliLmZpbGUuc3RyZWFtc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRnV0dXJlIj5GdXR1cmU8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5nZWxpa2EgTGFuZ2VyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIyIEZlYiAxOTk5PC9wPgo8cD5UaGUgZm9sbG93aW5nIHF1ZXN0aW9uIGNhbWUgZnJvbSBUaG9yc3RlbiBIZXJsZW1hbm46PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+WW91IGNhbiBzZXQgYSBtb2RlIHdoZW4gY29uc3RydWN0aW5nIG9yIG9wZW5pbmcgYSBmaWxlLXN0cmVhbSBvcgogIGZpbGVidWYsIGUuZy4gIGlvczo6aW4sIGlvczo6b3V0LCBpb3M6OmJpbmFyeSwgLi4uIEJ1dCBob3cgY2FuIEkgZ2V0CiAgdGhhdCBtb2RlIGxhdGVyIG9uLCBlLmcuIGluIG15IG93biBvcGVyYXRvciAmbHQ7Jmx0OyBvciBvcGVyYXRvcgogICZndDsmZ3Q7IG9yIHdoZW4gSSB3YW50IHRvIGNoZWNrIHdoZXRoZXIgYSBmaWxlLXN0cmVhbSBvcgogIGZpbGUtYnVmZmVyIG9iamVjdCBwYXNzZWQgYXMgcGFyYW1ldGVyIGlzIG9wZW5lZCBmb3IgaW5wdXQgb3Igb3V0cHV0CiAgb3IgYmluYXJ5PyBJcyB0aGVyZSBubyBwb3NzaWJpbGl0eT8gSXMgdGhpcyBhIGRlc2lnbi1lcnJvciBpbiB0aGUKICBzdGFuZGFyZCBDKysgbGlicmFyeT8gPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5JdCBpcyBpbmRlZWQgaW1wb3NzaWJsZSB0byBmaW5kIG91dCB3aGF0IGEgc3RyZWFtJ3Mgb3Igc3RyZWFtCmJ1ZmZlcidzIG9wZW4gbW9kZSBpcywgYW5kIHdpdGhvdXQgdGhhdCBrbm93bGVkZ2UgeW91IGRvbid0IGtub3cKaG93IGNlcnRhaW4gb3BlcmF0aW9ucyBiZWhhdmUuIEp1c3QgdGhpbmsgb2YgdGhlIGFwcGVuZCBtb2RlLiA8L3A+Cgo8cD5Cb3RoIHN0cmVhbXMgYW5kIHN0cmVhbSBidWZmZXJzIHNob3VsZCBoYXZlIGEgPHR0Pm1vZGUoKTwvdHQ+IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUKY3VycmVudCBvcGVuIG1vZGUgc2V0dGluZy4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkZvciBzdHJlYW0gYnVmZmVycywgYWRkIGEgZnVuY3Rpb24gdG8gdGhlIGJhc2UgY2xhc3MgYXMgYSBub24tdmlydHVhbCBmdW5jdGlvbgpxdWFsaWZpZWQgYXMgY29uc3QgdG8gMjcuNS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJlYW1idWYiPiBbbGliLnN0cmVhbWJ1Zl08L2E+OjwvcD4KCjxwPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzx0dD5vcGVubW9kZSBtb2RlKCkgY29uc3Q8L3R0Pjs8L3A+Cgo8cD48Yj4mbmJzcDsmbmJzcDsmbmJzcDsgUmV0dXJuczwvYj4gdGhlIGN1cnJlbnQgb3BlbiBtb2RlLjwvcD4KCjxwPldpdGggc3RyZWFtcywgSSdtIG5vdCBzdXJlIHdoYXQgdG8gc3VnZ2VzdC4gSW4gcHJpbmNpcGxlLCB0aGUgbW9kZQpjb3VsZCBhbHJlYWR5IGJlIHJldHVybmVkIGJ5IDx0dD5pb3NfYmFzZTwvdHQ+LCBidXQgdGhlIG1vZGUgaXMgb25seQppbml0aWFsaXplZCBmb3IgZmlsZSBhbmQgc3RyaW5nIHN0cmVhbSBvYmplY3RzLCB1bmxlc3MgSSdtIG92ZXJsb29raW5nCmFueXRoaW5nLiBGb3IgdGhpcyByZWFzb24gaXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBtb3N0IGRlcml2ZWQKc3RyZWFtIGNsYXNzZXMuIEFsdGVybmF0aXZlbHksIGl0IGNvdWxkIGJlIGFkZGVkIHRvIDx0dD5iYXNpY19pb3M8L3R0PgphbmQgd291bGQgYmUgZGVmYXVsdCBpbml0aWFsaXplZCBpbiA8dHQ+YmFzaWNfaW9zJmx0OyZndDs6OmluaXQoKTwvdHQ+LjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgbWlnaHQgYmUgYW4gaW50ZXJlc3RpbmcgZXh0ZW5zaW9uIGZvciBzb21lIGZ1dHVyZSwgYnV0IGl0IGlzCm5vdCBhIGRlZmVjdCBpbiB0aGUgY3VycmVudCBzdGFuZGFyZC4gVGhlIFByb3Bvc2VkIFJlc29sdXRpb24gaXMKcmV0YWluZWQgZm9yIGZ1dHVyZSByZWZlcmVuY2UuPC9wPgo8aHI+CjxhIG5hbWU9IjEzMSI+PGgzPjEzMS4mbmJzcDtsaXN0OjpzcGxpY2UgdGhyb3dzIG5vdGhpbmc8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4yLjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmRlcXVlLnNwZWNpYWwiPiBbbGliLmRlcXVlLnNwZWNpYWxdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0hvd2FyZCBIaW5uYW50Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgTWFyIDE5OTk8L3A+CjxwPldoYXQgaGFwcGVucyBpZiBhIHNwbGljZSBvcGVyYXRpb24gY2F1c2VzIHRoZSBzaXplKCkgb2YgYSBsaXN0IHRvIGdyb3cgCmJleW9uZCBtYXhfc2l6ZSgpPzwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+U2l6ZSgpIGNhbm5vdCBncm93IGJleW9uZCBtYXhfc2l6ZSgpLiZuYnNwOyA8L3A+Cjxocj4KPGEgbmFtZT0iMTM1Ij48aDM+MTM1LiZuYnNwO2Jhc2ljX2lvc3RyZWFtIGRvdWJseSBpbml0aWFsaXplZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMS41LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvc3RyZWFtLmNvbnMiPiBbbGliLmlvc3RyZWFtLmNvbnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0hvd2FyZCBIaW5uYW50Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgTWFyIDE5OTk8L3A+CjxwPi0xLSBFZmZlY3RzIENvbnN0cnVjdHMgYW4gb2JqZWN0IG9mIGNsYXNzIGJhc2ljX2lvc3RyZWFtLCBhc3NpZ25pbmcKaW5pdGlhbCB2YWx1ZXMgdG8gdGhlIGJhc2UgY2xhc3NlcyBieSBjYWxsaW5nCmJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyhzYikgKGxpYi5pc3RyZWFtKSBhbmQKYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7KHNiKSAobGliLm9zdHJlYW0pPC9wPgoKPHA+VGhlIGNhbGxlZCBmb3IgYmFzaWNfaXN0cmVhbSBhbmQgYmFzaWNfb3N0cmVhbSBjb25zdHJ1Y3RvcnMgY2FsbAppbml0KHNiKS4gVGhpcyBtZWFucyB0aGF0IHRoZSBiYXNpY19pb3N0cmVhbSdzIHZpcnR1YWwgYmFzZSBjbGFzcyBpcwppbml0aWFsaXplZCB0d2ljZS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI3LjYuMS41LjEsIHBhcmFncmFwaCAxIHRvOjwvcD4KCjxwPi0xLSBFZmZlY3RzIENvbnN0cnVjdHMgYW4gb2JqZWN0IG9mIGNsYXNzIGJhc2ljX2lvc3RyZWFtLCBhc3NpZ25pbmcKaW5pdGlhbCB2YWx1ZXMgdG8gdGhlIGJhc2UgY2xhc3NlcyBieSBjYWxsaW5nCmJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyhzYikgKGxpYi5pc3RyZWFtKS48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGFncmVlZCB0aGF0IHRoZSA8dHQ+IGluaXQoKTwvdHQ+IGZ1bmN0aW9uIGlzIGNhbGxlZAp0d2ljZSwgYnV0IHNhaWQgdGhhdCB0aGlzIGlzIGhhcm1sZXNzIGFuZCBzbyBub3QgYSBkZWZlY3QgaW4gdGhlCnN0YW5kYXJkLjwvcD4KPGhyPgo8YSBuYW1lPSIxMzgiPjxoMz4xMzguJm5ic3A7Q2xhc3MgY3R5cGVfYnluYW1lJmx0O2NoYXImZ3Q7IHJlZHVuZGFudCBhbmQgbWlzbGVhZGluZzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNvZGVjdnQiPiBbbGliLmxvY2FsZS5jb2RlY3Z0XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNGdXR1cmUiPkZ1dHVyZTwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmdlbGlrYSBMYW5nZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7TWFyY2ggMTgsIDE5OTk8L3A+CjxwPlNlY3Rpb24gMjIuMi4xLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29kZWN2dCI+IFtsaWIubG9jYWxlLmNvZGVjdnRdPC9hPiBzcGVjaWZpZXMgdGhhdApjdHlwZV9ieW5hbWUmbHQ7Y2hhciZndDsgbXVzdCBiZSBhIHNwZWNpYWxpemF0aW9uIG9mIHRoZSBjdHlwZV9ieW5hbWUKdGVtcGxhdGUuPC9wPgoKPHA+SXQgaXMgY29tbW9uIHByYWN0aWNlIGluIHRoZSBzdGFuZGFyZCB0aGF0IHNwZWNpYWxpemF0aW9ucyBvZiBjbGFzcyB0ZW1wbGF0ZXMgYXJlIG9ubHkKbWVudGlvbmVkIHdoZXJlIHRoZSBpbnRlcmZhY2Ugb2YgdGhlIHNwZWNpYWxpemF0aW9uIGRldmlhdGVzIGZyb20gdGhlIGludGVyZmFjZSBvZiB0aGUKdGVtcGxhdGUgdGhhdCBpdCBpcyBhIHNwZWNpYWxpemF0aW9uIG9mLiBPdGhlcndpc2UsIHRoZSBmYWN0IHdoZXRoZXIgb3Igbm90IGEgcmVxdWlyZWQKaW5zdGFudGlhdGlvbiBpcyBhbiBhY3R1YWwgaW5zdGFudGlhdGlvbiBvciBhIHNwZWNpYWxpemF0aW9uIGlzIGxlZnQgb3BlbiBhcyBhbgppbXBsZW1lbnRhdGlvbiBkZXRhaWwuIDwvcD4KCjxwPkNsYXVzZSAyMi4yLjEuNCBkZXZpYXRlcyBmcm9tIHRoYXQgcHJhY3RpY2UgYW5kIGZvciB0aGF0IHJlYXNvbiBpcyBtaXNsZWFkaW5nLiBUaGUKZmFjdCwgdGhhdCBjdHlwZV9ieW5hbWUmbHQ7Y2hhciZndDsgaXMgc3BlY2lmaWVkIGFzIGEgc3BlY2lhbGl6YXRpb24gc3VnZ2VzdHMgdGhhdCB0aGVyZQptdXN0IGJlIHNvbWV0aGluZyAic3BlY2lhbCIgYWJvdXQgaXQsIGJ1dCBpdCBoYXMgdGhlIGV4YWN0IHNhbWUgaW50ZXJmYWNlIGFzIHRoZQpjdHlwZV9ieW5hbWUgdGVtcGxhdGUuIENsYXVzZSAyMi4yLjEuNCBkb2VzIG5vdCBoYXZlIGFueSBleHBsYW5hdG9yeSB2YWx1ZSwgaXMgYXQgYmVzdApyZWR1bmRhbnQsIGF0IHdvcnN0IG1pc2xlYWRpbmcgLSB1bmxlc3MgSSBhbSBtaXNzaW5nIGFueXRoaW5nLiA8L3A+Cgo8cD5OYXR1cmFsbHksIGFuIGltcGxlbWVudGF0aW9uIHdpbGwgbW9zdCBsaWtlbHkgaW1wbGVtZW50IGN0eXBlX2J5bmFtZSZsdDtjaGFyJmd0OyBhcyBhCnNwZWNpYWxpemF0aW9uLCBiZWNhdXNlIHRoZSBiYXNlIGNsYXNzIGN0eXBlJmx0O2NoYXImZ3Q7IGlzIGEgc3BlY2lhbGl6YXRpb24gd2l0aCBhbgppbnRlcmZhY2UgZGlmZmVyZW50IGZyb20gdGhlIGN0eXBlIHRlbXBsYXRlLCBidXQgdGhhdCdzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBhbmQgbmVlZApub3QgYmUgbWVudGlvbmVkIGluIHRoZSBzdGFuZGFyZC4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4gVGhlIHN0YW5kYXJkIGFzIHdyaXR0ZW4gaXMgbWlsZGx5IG1pc2xlYWRpbmcsIGJ1dCB0aGUgY29ycmVjdCBmaXgKaXMgdG8gZGVhbCB3aXRoIHRoZSB1bmRlcmx5aW5nIHByb2JsZW0gaW4gdGhlIGN0eXBlX2J5bmFtZSBiYXNlIGNsYXNzLApub3QgaW4gdGhlIHNwZWNpYWxpemF0aW9uLiBTZWUgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyOCI+MjI4PC9hPi48L3A+Cjxocj4KPGEgbmFtZT0iMTQwIj48aDM+MTQwLiZuYnNwO21hcCZsdDtLZXksIFQmZ3Q7Ojp2YWx1ZV90eXBlIGRvZXMgbm90IHNhdGlzZnkgdGhlIGFzc2lnbmFibGUgcmVxdWlyZW1lbnQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5tYXAiPiBbbGliLm1hcF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRnV0dXJlIj5GdXR1cmU8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFyayBNaXRjaGVsbCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNCBBcHIgMTk5OTwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+MjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMiPiBbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdPC9hPjxicj4KICA8YnI+CiAgZXhwcmVzc2lvbiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gdHlwZQogICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBwcmUvcG9zdC1jb25kaXRpb248YnI+CiAgLS0tLS0tLS0tLS0tLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAtLS0tLS0tLS0tLSAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAtLS0tLS0tLS0tLS0tLS0tLS0tPGJyPgogIFg6OnZhbHVlX3R5cGUmbmJzcDsmbmJzcDsmbmJzcDsgVAogICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogIFQgaXMgYXNzaWduYWJsZTxicj4KICA8YnI+CiAgMjMuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIubWFwIj4gW2xpYi5tYXBdPC9hPjxicj4KICA8YnI+CiAgQSBtYXAgc2F0aXNmaWVzIGFsbCB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgY29udGFpbmVyLjxicj4KICA8YnI+CiAgRm9yIGEgbWFwJmx0O0tleSwgVCZndDsgLi4uIHRoZSB2YWx1ZV90eXBlIGlzIHBhaXImbHQ7Y29uc3QgS2V5LCBUJmd0Oy48L3A+CjwvYmxvY2txdW90ZT4KCjxwPlRoZXJlJ3MgYSBjb250cmFkaWN0aW9uIGhlcmUuIEluIHBhcnRpY3VsYXIsIGBwYWlyJmx0O2NvbnN0IEtleSwKVCZndDsnIGlzIG5vdCBhc3NpZ25hYmxlOyB0aGUgYGNvbnN0IEtleScgY2Fubm90IGJlIGFzc2lnbmVkCnRvLiBTbywmbmJzcDsgbWFwJmx0O0tleSwgVCZndDs6OnZhbHVlX3R5cGUgZG9lcyBub3Qgc2F0aXNmeSB0aGUKYXNzaWduYWJsZSByZXF1aXJlbWVudCBpbXBvc2VkIGJ5IGEgY29udGFpbmVyLjwvcD4KCjxwPjxpPltTZWUgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEwMyI+MTAzPC9hPiBmb3IgdGhlIHNsaWdodGx5IHJlbGF0ZWQgaXNzdWUgb2YKbW9kaWZpY2F0aW9uIG9mIHNldCBrZXlzLl08L2k+PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGJlbGlldmVzIHRoYXQgdGhlIHN0YW5kYXJkIGlzIGluY29uc2lzdGVudCwgYnV0IHRoYXQgdGhpcwppcyBhIGRlc2lnbiBwcm9ibGVtIHJhdGhlciB0aGFuIGEgc3RyaWN0IGRlZmVjdC4gTWF5IHdpc2ggdG8KcmVjb25zaWRlciBmb3IgdGhlIG5leHQgc3RhbmRhcmQuPC9wPgo8aHI+CjxhIG5hbWU9IjE0MyI+PGgzPjE0My4mbmJzcDtDIC5oIGhlYWRlciB3b3JkaW5nIHVuY2xlYXI8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDtELjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLmMuaGVhZGVycyI+IFtkZXByLmMuaGVhZGVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7Q2hyaXN0b3BoZSBkZSBEaW5lY2hpbiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs0IE1heSAxOTk5PC9wPgo8cD5bZGVwci5jLmhlYWRlcnNdIHBhcmFncmFwaCAyIHJlYWRzOjwvcD4KCjxibG9ja3F1b3RlPgoKPHA+RWFjaCBDIGhlYWRlciwgd2hvc2UgbmFtZSBoYXMgdGhlIGZvcm0gbmFtZS5oLCBiZWhhdmVzIGFzIGlmIGVhY2gKbmFtZSBwbGFjZWQgaW4gdGhlIFN0YW5kYXJkIGxpYnJhcnkgbmFtZXNwYWNlIGJ5IHRoZSBjb3JyZXNwb25kaW5nCmNuYW1lIGhlYWRlciBpcyBhbHNvIHBsYWNlZCB3aXRoaW4gdGhlIG5hbWVzcGFjZSBzY29wZSBvZiB0aGUKbmFtZXNwYWNlIHN0ZCBhbmQgaXMgZm9sbG93ZWQgYnkgYW4gZXhwbGljaXQgdXNpbmctZGVjbGFyYXRpb24KKF9uYW1lc3BhY2UudWRlY2xfKTwvcD4KCjwvYmxvY2txdW90ZT4KCjxwPkkgdGhpbmsgaXQgc2hvdWxkIG1lbnRpb24gdGhlIGdsb2JhbCBuYW1lIHNwYWNlIHNvbWV3aGVyZS4uLiZuYnNwOwpDdXJyZW50bHksIGl0IGluZGljYXRlcyB0aGF0IG5hbWUgcGxhY2VkIGluIHN0ZCBpcyBhbHNvIHBsYWNlZCBpbgpzdGQuLi48L3A+Cgo8cD5JIGRvbid0IGtub3cgd2hhdCBpcyB0aGUgY29ycmVjdCB3b3JkaW5nLiBGb3IgaW5zdGFuY2UsIGlmIHN0cnVjdAp0bSBpcyBkZWZpbmVkIGluIHRpbWUuaCwgY3RpbWUgZGVjbGFyZXMgc3RkOjp0bS4gSG93ZXZlciwgdGhlIGN1cnJlbnQKd29yZGluZyBzZWVtcyBhbWJpZ3VvdXMgcmVnYXJkaW5nIHdoaWNoIG9mIHRoZSBmb2xsb3dpbmcgd291bGQgb2NjdXIKZm9yIHVzZSBvZiBib3RoIGN0aW1lIGFuZCB0aW1lLmg6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT4vLyB2ZXJzaW9uIDE6Cm5hbWVzcGFjZSBzdGQgewogICAgICAgIHN0cnVjdCB0bSB7IC4uLiB9Owp9CnVzaW5nIHN0ZDo6dG07CgovLyB2ZXJzaW9uIDI6CnN0cnVjdCB0bSB7IC4uLiB9OwpuYW1lc3BhY2Ugc3RkIHsKICAgICAgICB1c2luZyA6OnRtOwp9CgovLyB2ZXJzaW9uIDM6CnN0cnVjdCB0bSB7IC4uLiB9OwpuYW1lc3BhY2Ugc3RkIHsKICAgICAgICBzdHJ1Y3QgdG0geyAuLi4gfTsKfTwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD5JIHRoaW5rIHZlcnNpb24gMSBpcyBpbnRlbmRlZC48L3A+Cgo8cD48aT5bS29uYTogVGhlIExXRyBhZ3JlZWQgdGhhdCB0aGUgd29yZGluZyBpcyBub3QgY2xlYXIuIEl0IGFsc28KYWdyZWVkIHRoYXQgdmVyc2lvbiAxIGlzIGludGVuZGVkLCB2ZXJzaW9uIDIgaXMgbm90IGVxdWl2YWxlbnQgdG8KdmVyc2lvbiAxLCBhbmQgdmVyc2lvbiAzIGlzIGNsZWFybHkgbm90IGludGVuZGVkLiBUaGUgZXhhbXBsZSBiZWxvdwp3YXMgY29uc3RydWN0ZWQgYnkgTmF0aGFuIE15ZXJzIHRvIGlsbHVzdHJhdGUgd2h5IHZlcnNpb24gMiBpcyBub3QKZXF1aXZhbGVudCB0byB2ZXJzaW9uIDEuPC9pPjwvcD4KCjxwPjxpPkFsdGhvdWdoIG5vdCBlcXVpdmFsZW50LCB0aGUgTFdHIGlzIHVuc3VyZSBpZiAoMikgaXMgZW5vdWdoIG9mCmEgcHJvYmxlbSB0byBiZSBwcm9oaWJpdGVkLiBQb2ludHMgZGlzY3Vzc2VkIGluIGZhdm9yIG9mIGFsbG93aW5nCigyKTo8L2k+PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHVsPgogICAgPGxpPjxpPkl0IG1heSBiZSBhIGNvbnZlbmllbmNlIHRvIGltcGxlbWVudG9ycy48L2k+PC9saT4KICAgIDxsaT48aT5UaGUgb25seSBjYXNlcyB0aGF0IGZhaWwgYXJlIHN0cnVjdHMsIG9mIHdoaWNoIHRoZSBDIGxpYnJhcnkKICAgICAgY29udGFpbnMgb25seSBhIGZldy48L2k+PC9saT4KICA8L3VsPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5dPC9pPjwvcD4KCjxwPjxiPkV4YW1wbGU6PC9iPjwvcD4KCjxibG9ja3F1b3RlPgoKPHByZT4jaW5jbHVkZSAmbHQ7dGltZS5oJmd0OwojaW5jbHVkZSAmbHQ7dXRpbGl0eSZndDsKCmludCBtYWluKCkgewogICAgc3RkOjp0bSAqIHQ7CiAgICBtYWtlX3BhaXIoIHQsIHQgKTsgLy8gb2theSB3aXRoIHZlcnNpb24gMSBkdWUgdG8gS29lbmlnIGxvb2t1cAogICAgICAgICAgICAgICAgICAgICAgIC8vIGZhaWxzIHdpdGggdmVyc2lvbiAyOyBtYWtlX3BhaXIgbm90IGZvdW5kCiAgICByZXR1cm4gMDsKfTwvcHJlPgoKPC9ibG9ja3F1b3RlPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD5SZXBsYWNlIEQuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2Z1dHVyZS5odG1sI2RlcHIuYy5oZWFkZXJzIj4gW2RlcHIuYy5oZWFkZXJzXTwvYT4gcGFyYWdyYXBoIDIgd2l0aDo8L3A+Cgo8YmxvY2txdW90ZT4KCjxwPiBFYWNoIEMgaGVhZGVyLCB3aG9zZSBuYW1lIGhhcyB0aGUgZm9ybSBuYW1lLmgsIGJlaGF2ZXMgYXMgaWYgZWFjaApuYW1lIHBsYWNlZCBpbiB0aGUgU3RhbmRhcmQgbGlicmFyeSBuYW1lc3BhY2UgYnkgdGhlIGNvcnJlc3BvbmRpbmcKY25hbWUgaGVhZGVyIGlzIGFsc28gcGxhY2VkIHdpdGhpbiB0aGUgbmFtZXNwYWNlIHNjb3BlIG9mIHRoZQpuYW1lc3BhY2Ugc3RkIGJ5IG5hbWUuaCBhbmQgaXMgZm9sbG93ZWQgYnkgYW4gZXhwbGljaXQKdXNpbmctZGVjbGFyYXRpb24gKF9uYW1lc3BhY2UudWRlY2xfKSBpbiBnbG9iYWwgc2NvcGUuPC9wPgoKPC9ibG9ja3F1b3RlPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPiBUaGUgY3VycmVudCB3b3JkaW5nIGluIHRoZSBzdGFuZGFyZCBpcyB0aGUgcmVzdWx0IG9mIGEgZGlmZmljdWx0CmNvbXByb21pc2UgdGhhdCBhdmVydGVkIGRlbGF5IG9mIHRoZSBzdGFuZGFyZC4gQmFzZWQgb24gZGlzY3Vzc2lvbnMKaW4gVG9reW8gaXQgaXMgY2xlYXIgdGhhdCB0aGVyZSBpcyBubyBzdGlsbCBubyBjb25zZW5zdXMgb24gc3RyaWN0ZXIKd29yZGluZywgc28gdGhlIGlzc3VlIGhhcyBiZWVuIGNsb3NlZC4gSXQgaXMgc3VnZ2VzdGVkIHRoYXQgdXNlcnMgbm90CndyaXRlIGNvZGUgdGhhdCBkZXBlbmRzIG9uIEtvZW5pZyBsb29rdXAgb2YgQyBsaWJyYXJ5IGZ1bmN0aW9ucy48L3A+Cjxocj4KPGEgbmFtZT0iMTQ1Ij48aDM+MTQ1LiZuYnNwO2FkanVzdGZpZWxkIGxhY2tzIGRlZmF1bHQgdmFsdWU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy40LjQuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuYmFzaWMuaW9zLmNvbnMiPiBbbGliLmJhc2ljLmlvcy5jb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmdlbGlrYSBMYW5nZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTIgTWF5IDE5OTk8L3A+CjxwPlRoZXJlIGlzIG5vIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBhZGp1c3RmaWVsZCBkZWZpbmVkLCBhbHRob3VnaAptYW55IHBlb3BsZSBiZWxpZXZlIHRoYXQgdGhlIGRlZmF1bHQgYWRqdXN0bWVudCB3ZXJlIHJpZ2h0LiBUaGlzIGlzIGEKY29tbW9uIG1pc3VuZGVyc3RhbmRpbmcuIFRoZSBzdGFuZGFyZCBvbmx5IGRlZmluZXMgdGhhdCwgaWYgbm8KYWRqdXN0bWVudCBpcyBzcGVjaWZpZWQsIGFsbCB0aGUgcHJlZGVmaW5lZCBpbnNlcnRlcnMgbXVzdCBhZGQgZmlsbApjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgYWN0dWFsIHZhbHVlLCB3aGljaCBpcyAiYXMgaWYiIHRoZQpyaWdodCBmbGFnIHdlcmUgc2V0LiBUaGUgZmxhZyBpdHNlbGYgbmVlZCBub3QgYmUgc2V0LjwvcD4KCjxwPldoZW4geW91IGltcGxlbWVudCBhIHVzZXItZGVmaW5lZCBpbnNlcnRlciB5b3UgY2Fubm90IHJlbHkgb24gcmlnaHQKYmVpbmcgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgdGhlIGFkanVzdGZpZWxkLiBJbnN0ZWFkLCB5b3UgbXVzdCBiZQpwcmVwYXJlZCB0byBmaW5kIG5vbmUgb2YgdGhlIGZsYWdzIHNldCBhbmQgbXVzdCBrZWVwIGluIG1pbmQgdGhhdCBpbgp0aGlzIGNhc2UgeW91IHNob3VsZCBtYWtlIHlvdXIgaW5zZXJ0ZXIgYmVoYXZlICJhcyBpZiIgdGhlCnJpZ2h0IGZsYWcgd2VyZSBzZXQuIFRoaXMgaXMgc3VycHJpc2luZyB0byBtYW55IHBlb3BsZSBhbmQgY29tcGxpY2F0ZXMKbWF0dGVycyBtb3JlIHRoYW4gbmVjZXNzYXJ5LjwvcD4KCjxwPlVubGVzcyB0aGVyZSBpcyBhIGdvb2QgcmVhc29uIHdoeSB0aGUgYWRqdXN0ZmllbGQgc2hvdWxkIG5vdCBiZQppbml0aWFsaXplZCBJIHdvdWxkIHN1Z2dlc3QgdG8gZ2l2ZSBpdCB0aGUgZGVmYXVsdCB2YWx1ZSB0aGF0CmV2ZXJ5Ym9keSBleHBlY3RzIGFueXdheS48L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGlzIGlzIG5vdCBhIGRlZmVjdC4gSXQgaXMgZGVsaWJlcmF0ZSB0aGF0IHRoZSBkZWZhdWx0IGlzIG5vIGJpdHMKc2V0LiBDb25zaWRlciBBcmFiaWMgb3IgSGVicmV3LCBmb3IgZXhhbXBsZS4gU2VlIDIyLjIuMi4yLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0ucHV0LnZpcnR1YWxzIj4gW2xpYi5mYWNldC5udW0ucHV0LnZpcnR1YWxzXTwvYT4gcGFyYWdyYXBoIDE5LCBUYWJsZSA2MSAtIEZpbGwgcGFkZGluZy48L3A+Cjxocj4KPGEgbmFtZT0iMTQ5Ij48aDM+MTQ5LiZuYnNwO0luc2VydCBzaG91bGQgcmV0dXJuIGl0ZXJhdG9yIHRvIGZpcnN0IGVsZW1lbnQgaW5zZXJ0ZWQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5zZXF1ZW5jZS5yZXFtdHMiPiBbbGliLnNlcXVlbmNlLnJlcW10c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRnV0dXJlIj5GdXR1cmU8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5kcmV3IEtvZW5pZyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOCBKdW4gMTk5OTwvcD4KPHA+U3VwcG9zZSB0aGF0IGMgYW5kIGMxIGFyZSBzZXF1ZW50aWFsIGNvbnRhaW5lcnMgYW5kIGkgaXMgYW4KaXRlcmF0b3IgdGhhdCByZWZlcnMgdG8gYW4gZWxlbWVudCBvZiBjLiAgVGhlbiBJIGNhbiBpbnNlcnQgYSBjb3B5IG9mCmMxJ3MgZWxlbWVudHMgaW50byBjIGFoZWFkIG9mIGVsZW1lbnQgaSBieSBleGVjdXRpbmcgPC9wPgoKPGJsb2NrcXVvdGU+Cgo8cHJlPmMuaW5zZXJ0KGksIGMxLmJlZ2luKCksIGMxLmVuZCgpKTs8L3ByZT4KCjwvYmxvY2txdW90ZT4KCjxwPklmIGMgaXMgYSB2ZWN0b3IsIGl0IGlzIGZhaXJseSBlYXN5IGZvciBtZSB0byBmaW5kIG91dCB3aGVyZSB0aGUKbmV3bHkgaW5zZXJ0ZWQgZWxlbWVudHMgYXJlLCBldmVuIHRob3VnaCBpIGlzIG5vdyBpbnZhbGlkOiA8L3A+Cgo8YmxvY2txdW90ZT4KCjxwcmU+c2l6ZV90IGlfbG9jID0gaSAtIGMuYmVnaW4oKTsKYy5pbnNlcnQoaSwgYzEuYmVnaW4oKSwgYzEuZW5kKCkpOzwvcHJlPgoKPC9ibG9ja3F1b3RlPgoKPHA+YW5kIG5vdyB0aGUgZmlyc3QgaW5zZXJ0ZWQgZWxlbWVudCBpcyBhdCBjLmJlZ2luKCkraV9sb2MgYW5kIG9uZQpwYXN0IHRoZSBsYXN0IGlzIGF0IGMuYmVnaW4oKStpX2xvYytjMS5zaXplKCkuPGJyPgo8YnI+CkJ1dCB3aGF0IGlmIGMgaXMgYSBsaXN0PyBJIGNhbiBzdGlsbCBmaW5kIHRoZSBsb2NhdGlvbiBvZiBvbmUgcGFzdCB0aGUKbGFzdCBpbnNlcnRlZCBlbGVtZW50LCBiZWNhdXNlIGkgaXMgc3RpbGwgdmFsaWQuIFRvIGZpbmQgdGhlIGxvY2F0aW9uCm9mIHRoZSBmaXJzdCBpbnNlcnRlZCBlbGVtZW50LCB0aG91Z2gsIEkgbXVzdCBleGVjdXRlIHNvbWV0aGluZyBsaWtlIDwvcD4KCjxibG9ja3F1b3RlPgoKPHByZT5mb3IgKHNpemVfdCBuID0gYzEuc2l6ZSgpOyBuOyAtLW4pCiAgIC0taTs8L3ByZT4KCjwvYmxvY2txdW90ZT4KCjxwPmJlY2F1c2UgaSBpcyBub3cgbm8gbG9uZ2VyIGEgcmFuZG9tLWFjY2VzcyBpdGVyYXRvci48YnI+Cjxicj4KQWx0ZXJuYXRpdmVseSwgSSBtaWdodCB3cml0ZSBzb21ldGhpbmcgbGlrZSA8L3A+Cgo8YmxvY2txdW90ZT4KCjxwcmU+Ym9vbCBmaXJzdCA9IGkgPT0gYy5iZWdpbigpOwpsaXN0Jmx0O1QmZ3Q7OjppdGVyYXRvciBqID0gaTsKaWYgKCFmaXJzdCkgLS1qOwpjLmluc2VydChpLCBjMS5iZWdpbigpLCBjMS5lbmQoKSk7CmlmIChmaXJzdCkKICAgaiA9IGMuYmVnaW4oKTsKZWxzZQogICArK2o7PC9wcmU+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD53aGljaCwgYWx0aG91Z2ggd3JldGNoZWQsIHJlcXVpcmVzIGxlc3Mgb3ZlcmhlYWQuPGJyPgo8YnI+CkJ1dCBJIHRoaW5rIHRoZSByaWdodCBzb2x1dGlvbiBpcyB0byBjaGFuZ2UgdGhlIGRlZmluaXRpb24gb2YgaW5zZXJ0CnNvIHRoYXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgdm9pZCwgaXQgcmV0dXJucyBhbiBpdGVyYXRvciB0aGF0IHJlZmVycwp0byB0aGUgZmlyc3QgZWxlbWVudCBpbnNlcnRlZCwgaWYgYW55LCBhbmQgb3RoZXJ3aXNlIGlzIGEgY29weSBvZiBpdHMKZmlyc3QgYXJndW1lbnQuJm5ic3A7IDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBiZWxpZXZlcyB0aGlzIHdhcyBhbiBpbnRlbnRpb25hbCBkZXNpZ24gZGVjaXNpb24gYW5kIHNvIGlzCm5vdCBhIGRlZmVjdC4gSXQgbWF5IGJlIHdvcnRoIHJldmlzaXRpbmcgZm9yIHRoZSBuZXh0IHN0YW5kYXJkLjwvcD4KPGhyPgo8YSBuYW1lPSIxNTciPjxoMz4xNTcuJm5ic3A7TWVhbmluZ2xlc3MgZXJyb3IgaGFuZGxpbmcgZm9yIDx0dD5wd29yZCgpPC90dD4gYW5kIDx0dD5pd29yZCgpPC90dD4KPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC4yLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvcy5iYXNlLnN0b3JhZ2UiPiBbbGliLmlvcy5iYXNlLnN0b3JhZ2VdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0R1cCI+RHVwPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBKdWwgMTk5OTwvcD4KPHA+QWNjb3JkaW5nIHRvIHBhcmFncmFwaHMgMiBhbmQgNCBvZiAyNy40LjIuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zLmJhc2Uuc3RvcmFnZSI+IFtsaWIuaW9zLmJhc2Uuc3RvcmFnZV08L2E+LCB0aGUKZnVuY3Rpb25zIDx0dD5pd29yZCgpPC90dD4gYW5kIDx0dD5wd29yZCgpPC90dD4gInNldCB0aGUKPHR0PmJhZGJpdDwvdHQ+ICh3aGljaCBtaWdodCB0aHJvdyBhbiBleGNlcHRpb24pIiBvbgpmYWlsdXJlLiAuLi4gYnV0IHdoYXQgZG9lcyBpdCBtZWFuIGZvciA8dHQ+aW9zX2Jhc2U8L3R0PiB0byBzZXQgdGhlCjx0dD5iYWRiaXQ8L3R0Pj8gVGhlIHN0YXRlIGZhY2lsaXRpZXMgb2YgdGhlIElPU3RyZWFtIGxpYnJhcnkgYXJlCmRlZmluZWQgaW4gPHR0PmJhc2ljX2lvczwvdHQ+LCBhIGRlcml2ZWQgY2xhc3MhIEl0IHdvdWxkIGJlIHBvc3NpYmxlCnRvIGF0dGVtcHQgYSBkb3duIGNhc3QgYnV0IHRoZW4gaXQgd291bGQgYmUgbmVjZXNzYXJ5IHRvIGtub3cgdGhlCmNoYXJhY3RlciB0eXBlIHVzZWQuLi48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkR1cGxpY2F0ZS4gU2VlIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0MSI+NDE8L2E+LjwvcD4KPGhyPgo8YSBuYW1lPSIxNjIiPjxoMz4xNjIuJm5ic3A7UmVhbGx5ICJmb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb25zIj88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzIj4gW2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEdXAiPkR1cDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgSnVsIDE5OTk8L3A+CjxwPkl0IGFwcGVhcnMgdG8gYmUgc29tZXdoYXQgbm9uc2Vuc2ljYWwgdG8gY29uc2lkZXIgdGhlIGZ1bmN0aW9ucwpkZWZpbmVkIGluIHRoZSBwYXJhZ3JhcGhzIDEgdG8gNSB0byBiZSAiRm9ybWF0dGVkIGlucHV0CmZ1bmN0aW9uIiBidXQgc2luY2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIGEgc2VjdGlvbgpsYWJlbGVkICJGb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb25zIiBpdCBpcyB1bmNsZWFyIHRvIG1lCndoZXRoZXIgdGhlc2Ugb3BlcmF0b3JzIGFyZSBjb25zaWRlcmVkIGZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbnMgd2hpY2gKaGF2ZSB0byBjb25mb3JtIHRvIHRoZSAiY29tbW9uIHJlcXVpcmVtZW50cyIgZnJvbSAyNy42LjEuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHMiPiBbbGliLmlzdHJlYW0uZm9ybWF0dGVkLnJlcW10c108L2E+OiBJZiB0aGlzIGlzIHRoZSBjYXNlLCBhbGwgbWFuaXB1bGF0b3JzLCBub3QganVzdAo8dHQ+d3M8L3R0Piwgd291bGQgc2tpcCB3aGl0ZXNwYWNlIHVubGVzcyA8dHQ+bm9za2lwd3M8L3R0PiBpcyBzZXQKKC4uLiBidXQgc2V0dGluZyA8dHQ+bm9za2lwd3M8L3R0PiB1c2luZyB0aGUgbWFuaXB1bGF0b3Igc3ludGF4IHdvdWxkCmFsc28gc2tpcCB3aGl0ZXNwYWNlIDotKTwvcD4KCjxwPlNlZSBhbHNvIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzE2NiI+MTY2PC9hPiBmb3IgdGhlIHNhbWUgcHJvYmxlbSBpbiBmb3JtYXR0ZWQKb3V0cHV0PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5EdXBsaWNhdGUuIFNlZSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjAiPjYwPC9hPi48L3A+Cjxocj4KPGEgbmFtZT0iMTYzIj48aDM+MTYzLiZuYnNwO1JldHVybiBvZiA8dHQ+Z2NvdW50KCk8L3R0PiBhZnRlciBhIGNhbGwgdG8gPHR0Pmdjb3VudDwvdHQ+CjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkIj4gW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEdXAiPkR1cDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgSnVsIDE5OTk8L3A+CjxwPkl0IGlzIG5vdCBjbGVhciB3aGljaCBmdW5jdGlvbnMgYXJlIHRvIGJlIGNvbnNpZGVyZWQgdW5mb3JtYXR0ZWQKaW5wdXQgZnVuY3Rpb25zLiBBcyB3cml0dGVuLCBpdCBzZWVtcyB0aGF0IGFsbCBmdW5jdGlvbnMgaW4gMjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiBhcmUgdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb25zLiBIb3dldmVyLCBpdCBkb2VzIG5vdApyZWFsbHkgbWFrZSBtdWNoIHNlbnNlIHRvIGNvbnN0cnVjdCBhIHNlbnRyeSBvYmplY3QgZm9yCjx0dD5nY291bnQoKTwvdHQ+LCA8dHQ+c3luYygpPC90dD4sIC4uLiBBbHNvIGl0IGlzIHVuY2xlYXIgd2hhdApoYXBwZW5zIHRvIHRoZSA8dHQ+Z2NvdW50KCk8L3R0PiBpZiBlZy4gPHR0Pmdjb3VudCgpPC90dD4sCjx0dD5wdXRiYWNrKCk8L3R0PiwgPHR0PnVuZ2V0KCk8L3R0Piwgb3IgPHR0PnN5bmMoKTwvdHQ+IGlzIGNhbGxlZDoKVGhlc2UgZnVuY3Rpb25zIGRvbid0IGV4dHJhY3QgY2hhcmFjdGVycywgc29tZSBvZiB0aGVtIGV2ZW4KInVuZXh0cmFjdCIgYSBjaGFyYWN0ZXIuIFNob3VsZCB0aGlzIHN0aWxsIGJlIHJlZmxlY3RlZCBpbgo8dHQ+Z2NvdW50KCk8L3R0Pj8gT2YgY291cnNlLCBpdCBjb3VsZCBiZSByZWFkIGFzIGlmIGFmdGVyIGEgY2FsbCB0bwo8dHQ+Z2NvdW50KCk8L3R0PiA8dHQ+Z2NvdW50KCk8L3R0PiByZXR1cm4gPHR0PjA8L3R0PiAodGhlIGxhc3QKdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24sIDx0dD5nY291bnQoKTwvdHQ+LCBkaWRuJ3QgZXh0cmFjdCBhbnkKY2hhcmFjdGVyKSBhbmQgYWZ0ZXIgYSBjYWxsIHRvIDx0dD5wdXRiYWNrKCk8L3R0PiA8dHQ+Z2NvdW50KCk8L3R0PgpyZXR1cm5zIDx0dD4tMTwvdHQ+ICh0aGUgbGFzdCB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbgo8dHQ+cHV0YmFjaygpPC90dD4gZGlkICJleHRyYWN0IiBiYWNrIGludG8gdGhlCnN0cmVhbSkuIENvcnJlc3BvbmRpbmdseSBmb3IgPHR0PnVuZ2V0KCk8L3R0Pi4gSXMgdGhpcyB3aGF0IGlzCmludGVuZGVkPyAgSWYgc28sIHRoaXMgc2hvdWxkIGJlIGNsYXJpZmllZC4gT3RoZXJ3aXNlLCBhIGNvcnJlc3BvbmRpbmcKY2xhcmlmaWNhdGlvbiBzaG91bGQgYmUgdXNlZC48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkR1cGxpY2F0ZS4mbmJzcDsgU2VlIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MCI+NjA8L2E+LjwvcD4KPGhyPgo8YSBuYW1lPSIxNjYiPjxoMz4xNjYuJm5ic3A7UmVhbGx5ICJmb3JtYXR0ZWQgb3V0cHV0IGZ1bmN0aW9ucyI/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4yLjUuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbS5pbnNlcnRlcnMiPiBbbGliLm9zdHJlYW0uaW5zZXJ0ZXJzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEdXAiPkR1cDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgSnVsIDE5OTk8L3A+CjxwPkZyb20gMjcuNi4yLjUuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbS5mb3JtYXR0ZWQucmVxbXRzIj4gW2xpYi5vc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHNdPC9hPiBpdCBhcHBlYXJzIHRoYXQgYWxsIHRoZSBmdW5jdGlvbnMKZGVmaW5lZCBpbiAyNy42LjIuNS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtLmluc2VydGVycyI+IFtsaWIub3N0cmVhbS5pbnNlcnRlcnNdPC9hPiBoYXZlIHRvIGNvbnN0cnVjdCBhCjx0dD5zZW50cnk8L3R0PiBvYmplY3QuIElzIHRoaXMgcmVhbGx5IGludGVuZGVkPzwvcD4gCgo8cD5UaGlzIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBwcm9ibGVtIGFzIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzE2MiI+MTYyPC9hPiBidXQKZm9yIG91dHB1dCBpbnN0ZWFkIG9mIGlucHV0LjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+RHVwbGljYXRlLiBTZWUgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYwIj42MDwvYT4uPC9wPgo8aHI+CjxhIG5hbWU9IjE3NyI+PGgzPjE3Ny4mbmJzcDtDb21wbGV4IG9wZXJhdG9ycyBjYW5ub3QgYmUgZXhwbGljaXRseSBpbnN0YW50aWF0ZWQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNi4zLjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuY29tcGxleC5vcHMiPiBbbGliLmNvbXBsZXgub3BzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKdWR5IFdhcmQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MiBKdWwgMTk5OTwvcD4KPHA+QSB1c2VyIHdobyB0cmllcyB0byBleHBsaWNpdGx5IGluc3RhbnRpYXRlIGEgY29tcGxleCBub24tbWVtYmVyIG9wZXJhdG9yIHdpbGwKZ2V0IGNvbXBpbGF0aW9uIGVycm9ycy4gQmVsb3cgaXMgYSBzaW1wbGlmaWVkIGV4YW1wbGUgb2YgdGhlIHJlYXNvbiB3aHkuIFRoZQpwcm9ibGVtIGlzIHRoYXQgaXRlcmF0b3JfdHJhaXRzIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb24gYSBub24tcG9pbnRlciB0eXBlCmxpa2UgZmxvYXQsIHlldCB3aGVuIHRoZSBjb21waWxlciBpcyB0cnlpbmcgdG8gZGVjaWRlIHdoaWNoIG9wZXJhdG9yKyBuZWVkcyB0bwpiZSBpbnN0YW50aWF0ZWQgaXQgbXVzdCBpbnN0YW50aWF0ZSB0aGUgZGVjbGFyYXRpb24gdG8gZmlndXJlIG91dCB0aGUgZmlyc3QKYXJndW1lbnQgdHlwZSBvZiBhIHJldmVyc2VfaXRlcmF0b3Igb3BlcmF0b3IuPC9wPgo8cHJlPm5hbWVzcGFjZSBzdGQgewp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgSXRlcmF0b3ImZ3Q7IApzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzCnsKICAgIHR5cGVkZWYgdHlwZW5hbWUgSXRlcmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKfTsKCnRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OyBjbGFzcyByZXZlcnNlX2l0ZXJhdG9yOwoKLy8gcmV2ZXJzZV9pdGVyYXRvciBvcGVyYXRvcisKdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7IApyZXZlcnNlX2l0ZXJhdG9yJmx0O1QmZ3Q7IG9wZXJhdG9yKwoodHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzJmx0O1QmZ3Q7OjpkaWZmZXJlbmNlX3R5cGUsIGNvbnN0IHJldmVyc2VfaXRlcmF0b3ImbHQ7VCZndDsmYW1wOyk7Cgp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsgc3RydWN0IGNvbXBsZXgge307CgovLyBjb21wbGV4IG9wZXJhdG9yICsKdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CmNvbXBsZXgmbHQ7VCZndDsgb3BlcmF0b3IrIChjb25zdCBUJmFtcDsgbGhzLCBjb25zdCBjb21wbGV4Jmx0O1QmZ3Q7JmFtcDsgcmhzKSAKeyByZXR1cm4gY29tcGxleCZsdDtUJmd0OygpO30gCn0KCi8vIHJlcXVlc3QgZm9yIGV4cGxpY2l0IGluc3RhbnRpYXRpb24KdGVtcGxhdGUgc3RkOjpjb21wbGV4Jmx0O2Zsb2F0Jmd0OyBzdGQ6Om9wZXJhdG9yKyZsdDtmbG9hdCZndDsoY29uc3QgZmxvYXQmYW1wOywgCiAgICAgY29uc3Qgc3RkOjpjb21wbGV4Jmx0O2Zsb2F0Jmd0OyZhbXA7KTs8L3ByZT4KPHA+U2VlIGFsc28gYysrLXN0ZGxpYiByZWZsZWN0b3IgbWVzc2FnZXM6IGxpYi02ODE0LCA2ODE1LCA2ODE2LjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+SW1wbGVtZW50b3JzIGNhbiBtYWtlIG1pbm9yIGNoYW5nZXMgYW5kIHRoZSBleGFtcGxlIHdpbGwKd29yay4gVXNlcnMgYXJlIG5vdCBhZmZlY3RlZCBpbiBhbnkgY2FzZS48L3A+IDxwPkFjY29yZGluZyB0byBKb2huClNwaWNlciwgSXQgaXMgcG9zc2libGUgdG8gZXhwbGljaXRseSBpbnN0YW50aWF0ZSB0aGVzZSBvcGVyYXRvcnMgdXNpbmcKZGlmZmVyZW50IHN5bnRheDogY2hhbmdlICJzdGQ6Om9wZXJhdG9yKyZsdDtmbG9hdCZndDsiIHRvCiJzdGQ6Om9wZXJhdG9yKyIuPC9wPgoKPHA+VGhlIHByb3Bvc2VkIHJlc29sdXRpb24gb2YgaXNzdWUgMTIwIGlzIHRoYXQgdXNlcnMgd2lsbCBub3QgYmUgYWJsZQp0byBleHBsaWNpdGx5IGluc3RhbnRpYXRlIHN0YW5kYXJkIGxpYnJhcnkgdGVtcGxhdGVzLiBJZiB0aGF0CnJlc29sdXRpb24gaXMgYWNjZXB0ZWQgdGhlbiBsaWJyYXJ5IGltcGxlbWVudG9ycyB3aWxsIGJlIHRoZSBvbmx5IG9uZXMKdGhhdCB3aWxsIGJlIGFmZmVjdGVkIGJ5IHRoaXMgcHJvYmxlbSwgYW5kIHRoZXkgbXVzdCB1c2UgdGhlIGluZGljYXRlZApzeW50YXguPC9wPgo8aHI+CjxhIG5hbWU9IjE3OCI+PGgzPjE3OC4mbmJzcDtTaG91bGQgY2xvZyBhbmQgY2VyciBpbml0aWFsbHkgYmUgdGllZCB0byBjb3V0PzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIubmFycm93LnN0cmVhbS5vYmplY3RzIj4gW2xpYi5uYXJyb3cuc3RyZWFtLm9iamVjdHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0p1ZHkgV2FyZCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyIEp1bCAxOTk5PC9wPgo8cD4KU2VjdGlvbiAyNy4zLjEgc2F5cyAiQWZ0ZXIgdGhlIG9iamVjdCBjZXJyIGlzIGluaXRpYWxpemVkLApjZXJyLmZsYWdzKCkgJmFtcDsgdW5pdGJ1ZiBpcyBub256ZXJvLiBJdHMgc3RhdGUgaXMgb3RoZXJ3aXNlIHRoZSBzYW1lIGFzCnJlcXVpcmVkIGZvciBpb3NfYmFzZTo6aW5pdCAobGliLmJhc2ljLmlvcy5jb25zKS4gIEl0IGRvZXNuJ3Qgc2F5CmFueXRoaW5nIGFib3V0IHRoZSB0aGUgc3RhdGUgb2YgY2xvZy4gIFNvIHRoaXMgbWVhbnMgdGhhdCBjYWxsaW5nCmNlcnIudGllKCkgYW5kIGNsb2cudGllKCkgc2hvdWxkIHJldHVybiAwIChzZWUgVGFibGUgODkgZm9yCmlvc19iYXNlOjppbml0IGVmZmVjdHMpLgo8L3A+CjxwPgpOZWl0aGVyIG9mIHRoZSBwb3B1bGFyIHN0YW5kYXJkIGxpYnJhcnkgaW1wbGVtZW50YXRpb25zCnRoYXQgSSB0cmllZCBkb2VzIHRoaXMsIHRoZXkgYm90aCB0aWUgY2VyciBhbmQgY2xvZwp0byAmYW1wO2NvdXQuIEkgd291bGQgdGhpbmsgdGhhdCB3b3VsZCBiZSB3aGF0IHVzZXJzIGV4cGVjdC4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgc3RhbmRhcmQgaXMgY2xlYXIgYXMgd3JpdHRlbi48L3A+CjxwPjI3LjMuMS81IHNheXMgdGhhdCAiQWZ0ZXIgdGhlIG9iamVjdCBjZXJyIGlzIGluaXRpYWxpemVkLCBjZXJyLmZsYWdzKCkKJmFtcDsgdW5pdGJ1ZiBpcyBub256ZXJvLiBJdHMgc3RhdGUgaXMgb3RoZXJ3aXNlIHRoZSBzYW1lIGFzIHJlcXVpcmVkIGZvcgppb3NfYmFzZTo6aW5pdCAoMjcuNC40LjEpLiIgVGFibGUgODkgaW4gMjcuNC40LjEsIHdoaWNoIGdpdmVzIHRoZQpwb3N0Y29uZGl0aW9ucyBvZiBiYXNpY19pb3M6OmluaXQoKSwgc2F5cyB0aGF0IHRpZSgpIGlzIDAuIChPdGhlciBpc3N1ZXMgY29ycmVjdAppb3NfYmFzZTo6aW5pdCB0byBiYXNpY19pb3M6OmluaXQoKS4pPC9wPgo8aHI+CjxhIG5hbWU9IjE4MCI+PGgzPjE4MC4mbmJzcDtDb250YWluZXIgbWVtYmVyIGl0ZXJhdG9yIGFyZ3VtZW50cyBjb25zdG5lc3MgaGFzIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5jb250YWluZXJzIj4gW2xpYi5jb250YWluZXJzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNGdXR1cmUiPkZ1dHVyZTwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEYXZlIEFicmFoYW1zJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEgSnVsIDE5OTk8L3A+CjxwPkl0IGlzIHRoZSBjb25zdG5lc3Mgb2YgdGhlIGNvbnRhaW5lciB3aGljaCBzaG91bGQgY29udHJvbCB3aGV0aGVyCml0IGNhbiBiZSBtb2RpZmllZCB0aHJvdWdoIGEgbWVtYmVyIGZ1bmN0aW9uIHN1Y2ggYXMgZXJhc2UoKSwgbm90IHRoZQpjb25zdG5lc3Mgb2YgdGhlIGl0ZXJhdG9ycy4gVGhlIGl0ZXJhdG9ycyBvbmx5IHNlcnZlIHRvIGdpdmUKcG9zaXRpb25pbmcgaW5mb3JtYXRpb24uPC9wPgoKPHA+SGVyZSdzIGEgc2ltcGxlIGFuZCB0eXBpY2FsIGV4YW1wbGUgcHJvYmxlbSB3aGljaCBpcyBjdXJyZW50bHkgdmVyeQpkaWZmaWN1bHQgb3IgaW1wb3NzaWJsZSB0byBzb2x2ZSB3aXRob3V0IHRoZSBjaGFuZ2UgcHJvcG9zZWQKYmVsb3cuPC9wPgoKPHA+V3JhcCBhIHN0YW5kYXJkIGNvbnRhaW5lciBDIGluIGEgY2xhc3MgVyB3aGljaCBhbGxvd3MgY2xpZW50cyB0bwpmaW5kIGFuZCByZWFkIChidXQgbm90IG1vZGlmeSkgYSBzdWJyYW5nZSBvZiAoQy5iZWdpbigpLCBDLmVuZCgpXS4gVGhlCm9ubHkgbW9kaWZpY2F0aW9uIGNsaWVudHMgYXJlIGFsbG93ZWQgdG8gbWFrZSB0byBlbGVtZW50cyBpbiB0aGlzCnN1YnJhbmdlIGlzIHRvIGVyYXNlIHRoZW0gZnJvbSBDIHRocm91Z2ggdGhlIHVzZSBvZiBhIG1lbWJlciBmdW5jdGlvbgpvZiBXLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgYWxsIG5vbi1jb25zdCBpdGVyYXRvciBwYXJhbWV0ZXJzIG9mIHN0YW5kYXJkIGxpYnJhcnkKY29udGFpbmVyIG1lbWJlciBmdW5jdGlvbnMgdG8gYWNjZXB0IGNvbnN0X2l0ZXJhdG9yIHBhcmFtZXRlcnMuCk5vdGUgdGhhdCB0aGlzIGNoYW5nZSBhcHBsaWVzIHRvIGFsbCBsaWJyYXJ5IGNsYXVzZXMsIGluY2x1ZGluZwpzdHJpbmdzLjwvcD4KCjxwPkZvciBleGFtcGxlLCBpbiAgIDIxLjMuNS41ICBjaGFuZ2U6PGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8dHQ+aXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgcCk7PC90dD48YnI+Cjxicj4KdG86PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgPHR0Pml0ZXJhdG9yIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIHApOzwvdHQ+CjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBpc3N1ZSB3YXMgZGlzY3Vzc2VkIGF0IGxlbmd0aC4gSXQgd2FzIGdlbmVyYWxseSBhZ3JlZWQgdGhhdCAxKQpUaGVyZSBpcyBubyBtYWpvciB0ZWNobmljYWwgYXJndW1lbnQgYWdhaW5zdCB0aGUgY2hhbmdlIChhbHRob3VnaAp0aGVyZSBpcyBhIG1pbm9yIGFyZ3VtZW50IHRoYXQgc29tZSBvYnNjdXJlIHByb2dyYW1zIG1heSBicmVhayksIGFuZAoyKSBTdWNoIGEgY2hhbmdlIHdvdWxkIG5vdCBicmVhayBjb25zdCBjb3JyZWN0bmVzcy4gVGhlIGNvbmNlcm5zIGFib3V0Cm1ha2luZyB0aGUgY2hhbmdlIHdlcmUgMSkgaXQgaXMgdXNlciBkZXRlY3RhYmxlIChhbHRob3VnaCBvbmx5IGluCmJvdW5kYXJ5IGNhc2VzKSwgMikgaXQgY2hhbmdlcyBhIGxhcmdlIG51bWJlciBvZiBzaWduYXR1cmVzLCBhbmQgMykgaXQKc2VlbXMgbW9yZSBvZiBhIGRlc2lnbiBpc3N1ZSB0aGF0IGFuIG91dC1hbmQtb3V0IGRlZmVjdC48L3A+Cgo8cD5UaGUgTFdHIGJlbGlldmVzIHRoYXQgdGhpcyBpc3N1ZSBzaG91bGQgYmUgY29uc2lkZXJlZCBhcyBwYXJ0IG9mIGEKZ2VuZXJhbCByZXZpZXcgb2YgY29uc3QgaXNzdWVzIGZvciB0aGUgbmV4dCByZXZpc2lvbiBvZiB0aGUKc3RhbmRhcmQuIEFsc28gc2VlIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMDAiPjIwMDwvYT4uPC9wPgo8aHI+CjxhIG5hbWU9IjE4OCI+PGgzPjE4OC4mbmJzcDt2YWxhcnJheSBoZWxwZXJzIG1pc3NpbmcgYXVnbWVudGVkIGFzc2lnbm1lbnQgb3BlcmF0b3JzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjYuNS4yLjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIudmFsYXJyYXkuY2Fzc2lnbiI+IFtsaWIudmFsYXJyYXkuY2Fzc2lnbl08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRnV0dXJlIj5GdXR1cmU8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7R2FicmllbCBEb3MgUmVpcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBBdWcgMTk5OTwvcD4KPHA+MjYuNS4yLjYgZGVmaW5lcyBhdWdtZW50ZWQgYXNzaWdubWVudCBvcGVyYXRvcnMKdmFsYXJyYXkmbHQ7VCZndDs6Om9wPShjb25zdCBUJmFtcDspLCBidXQgZmFpbHMgdG8gcHJvdmlkZQpjb3JyZXNwb25kaW5nIHZlcnNpb25zIGZvciB0aGUgaGVscGVyIGNsYXNzZXMuIFRodXMgbWFraW5nIHRoZQpmb2xsb3dpbmcgaWxsZWdhbDo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPiNpbmNsdWRlICZsdDt2YWxhcnJheSZndDsKCmludCBtYWluKCkKewpzdGQ6OnZhbGFycmF5Jmx0O2RvdWJsZSZndDsgdigzLjE0LCAxOTk5KTsKCnZbOTldICo9IDIuMDsgLy8gT2sKCnN0ZDo6c2xpY2UgcygwLCA1MCwgMik7Cgp2W3NdICo9IDIuMDsgLy8gRVJST1IKfTwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPkkgY2FuJ3QgdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoYXQgb21pc3Npb24uICBJdCBtYWtlcyB0aGUKdmFsYXJyYXkgbGlicmFyeSBsZXNzIGludHVpdGl2ZSBhbmQgbGVzcyB1c2VmdWwuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5BbHRob3VnaCBwZXJoYXBzIGFuIHVuZm9ydHVuYXRlCmRlc2lnbiBkZWNpc2lvbiwgdGhlIG9taXNzaW9uIGlzIG5vdCBhIGRlZmVjdCBpbiB0aGUgY3VycmVudApzdGFuZGFyZC4mbmJzcDsgQSBmdXR1cmUgc3RhbmRhcmQgbWF5IHdpc2ggdG8gYWRkIHRoZSBtaXNzaW5nCm9wZXJhdG9ycy48L3A+Cjxocj4KPGEgbmFtZT0iMTkwIj48aDM+MTkwLiZuYnNwO21pbigpIGFuZCBtYXgoKSBmdW5jdGlvbnMgc2hvdWxkIGJlIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjMuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5taW4ubWF4Ij4gW2xpYi5hbGcubWluLm1heF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRnV0dXJlIj5GdXR1cmU8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFyayBSaW50b3VsJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI2IEF1ZyAxOTk5PC9wPgo8cD5Cb3RoIHN0ZDo6bWluIGFuZCBzdGQ6Om1heCBhcmUgZGVmaW5lZCBhcyB0ZW1wbGF0ZSBmdW5jdGlvbnMuICBUaGlzCmlzIHZlcnkgZGlmZmVyZW50IHRoYW4gdGhlIGRlZmluaXRpb24gb2Ygc3RkOjpwbHVzIChhbmQgc2ltaWxhcgpzdHJ1Y3RzKSB3aGljaCBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbiBvYmplY3RzIHdoaWNoIGluaGVyaXQKc3RkOjpiaW5hcnlfZnVuY3Rpb24uPGJyPgo8YnI+CiAgICAgICAgVGhpcyBsYWNrIG9mIGluaGVyaXRhbmNlIGxlYXZlcyBzdGQ6Om1pbiBhbmQgc3RkOjptYXggc29tZXdoYXQgdXNlbGVzcyBpbiBzdGFuZGFyZCBsaWJyYXJ5IGFsZ29yaXRobXMgd2hpY2ggcmVxdWlyZQphIGZ1bmN0aW9uIG9iamVjdCB0aGF0IGluaGVyaXRzIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+QWx0aG91Z2ggcGVyaGFwcyBhbiB1bmZvcnR1bmF0ZSBkZXNpZ24gZGVjaXNpb24sIHRoZSBvbWlzc2lvbiBpcyBub3QgYSBkZWZlY3QKaW4gdGhlIGN1cnJlbnQgc3RhbmRhcmQuJm5ic3A7IEEgZnV0dXJlIHN0YW5kYXJkIG1heSB3aXNoIHRvIGNvbnNpZGVyIGFkZGl0aW9uYWwKZnVuY3Rpb24gb2JqZWN0cy48L3A+Cjxocj4KPGEgbmFtZT0iMTkxIj48aDM+MTkxLiZuYnNwO1VuY2xlYXIgY29tcGxleGl0eSBmb3IgYWxnb3JpdGhtcyBzdWNoIGFzIGJpbmFyeSBzZWFyY2g8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNS4zLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcuYmluYXJ5LnNlYXJjaCI+IFtsaWIuYWxnLmJpbmFyeS5zZWFyY2hdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05pY28gSm9zdXR0aXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTAgT2N0IDE5OTk8L3A+CjxwPlRoZSBjb21wbGV4aXR5IG9mIGJpbmFyeV9zZWFyY2goKSBpcyBzdGF0ZWQgYXMgIkF0IG1vc3QKbG9nKGxhc3QtZmlyc3QpICsgMiBjb21wYXJpc29ucyIsIHdoaWNoIHNlZW1zIHRvIHNheSB0aGF0IHRoZQphbGdvcml0aG0gaGFzIGxvZ2FyaXRobWljIGNvbXBsZXhpdHkuIEhvd2V2ZXIsIHRoaXMgYWxnb3JpdGhtcyBpcwpkZWZpbmVkIGZvciBmb3J3YXJkIGl0ZXJhdG9ycy4gQW5kIGZvciBmb3J3YXJkIGl0ZXJhdG9ycywgdGhlIG5lZWQgdG8Kc3RlcCBlbGVtZW50LWJ5LWVsZW1lbnQgcmVzdWx0cyBpbnRvIGxpbmVhciBjb21wbGV4aXR5LiBCdXQgc3VjaCBhCnN0YXRlbWVudCBpcyBtaXNzaW5nIGluIHRoZSBzdGFuZGFyZC4gVGhlIHNhbWUgYXBwbGllcyB0bwpsb3dlcl9ib3VuZCgpLCB1cHBlcl9ib3VuZCgpLCBhbmQgZXF1YWxfcmFuZ2UoKS4mbmJzcDs8YnI+Cjxicj4KSG93ZXZlciwgc3RyaWN0bHkgc3BlYWtpbmcgdGhlIHN0YW5kYXJkIGNvbnRhaW5zIG5vIGJ1ZyBoZXJlLiBTbyB0aGlzCm1pZ2h0IGNvbnNpZGVyZWQgdG8gYmUgYSBjbGFyaWZpY2F0aW9uIG9yIGltcHJvdmVtZW50Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBjb21wbGV4aXR5IGlzIGV4cHJlc3NlZCBpbiB0ZXJtcyBvZiBjb21wYXJpc29ucywgYW5kIHRoYXQKY29tcGxleGl0eSBjYW4gYmUgbWV0IGV2ZW4gaWYgdGhlIG51bWJlciBvZiBpdGVyYXRvcnMgYWNjZXNzZWQgaXMKbGluZWFyLiBQYXJhZ3JhcGggMSBhbHJlYWR5IHNheXMgZXhhY3RseSB3aGF0IGhhcHBlbnMgdG8KaXRlcmF0b3JzLjwvcD4KPGhyPgo8YSBuYW1lPSIxOTIiPjxoMz4xOTIuJm5ic3A7YS5pbnNlcnQocCx0KSBpcyBpbmVmZmljaWVudCBhbmQgb3ZlcmNvbnN0cmFpbmVkPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0VkIEJyZXkmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBKdW4gMTk5OTwvcD4KPHA+QXMgZGVmaW5lZCBpbiAyMy4xLjIsIHBhcmFncmFwaCA3ICh0YWJsZSA2OSksIGEuaW5zZXJ0KHAsdCkgc3VmZmVycyBmcm9tCnNldmVyYWwgcHJvYmxlbXM6PC9wPgo8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iNSI+CiAgPHRib2R5Pjx0cj4KICAgIDx0ZD48Yj5leHByZXNzaW9uPC9iPjwvdGQ+CiAgICA8dGQ+PGI+cmV0dXJuIHR5cGU8L2I+PC90ZD4KICAgIDx0ZD48Yj5wcmUvcG9zdC1jb25kaXRpb248L2I+PC90ZD4KICAgIDx0ZD48Yj5jb21wbGV4aXR5PC9iPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+PHR0PmEuaW5zZXJ0KHAsdCk8L3R0PjwvdGQ+CiAgICA8dGQ+PHR0Pml0ZXJhdG9yPC90dD48L3RkPgogICAgPHRkPmluc2VydHMgdCBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBubyBlbGVtZW50IHdpdGgga2V5IGVxdWl2YWxlbnQgdG8gdGhlIGtleSBvZiAKICAgICAgIHQgaW4gY29udGFpbmVycyB3aXRoIHVuaXF1ZSBrZXlzOyBhbHdheXMgaW5zZXJ0cyB0IGluIGNvbnRhaW5lcnMgd2l0aCBlcXVpdmFsZW50IAogICAgICAga2V5cy4gYWx3YXlzIHJldHVybnMgdGhlIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IHdpdGgga2V5IGVxdWl2YWxlbnQgdG8gCiAgICAgICB0aGUga2V5IG9mIHQgLiBpdGVyYXRvciBwIGlzIGEgaGludCBwb2ludGluZyB0byB3aGVyZSB0aGUgaW5zZXJ0IHNob3VsZCBzdGFydCB0byBzZWFyY2guPC90ZD4KICAgIDx0ZD5sb2dhcml0aG1pYyBpbiBnZW5lcmFsLCBidXQgYW1vcnRpemVkIGNvbnN0YW50IGlmIHQgaXMgaW5zZXJ0ZWQgcmlnaHQgYWZ0ZXIgcCAuPC90ZD4KICA8L3RyPgo8L3Rib2R5PjwvdGFibGU+CjxwPjEuIEZvciBhIGNvbnRhaW5lciB3aXRoIHVuaXF1ZSBrZXlzLCBvbmx5IGxvZ2FyaXRobWljIGNvbXBsZXhpdHkgaXMKZ3VhcmFudGVlZCBpZiBubyBlbGVtZW50IGlzIGluc2VydGVkLCBldmVuIHRob3VnaCBjb25zdGFudCBjb21wbGV4aXR5IGlzIGFsd2F5cwpwb3NzaWJsZSBpZiBwIHBvaW50cyB0byBhbiBlbGVtZW50IGVxdWl2YWxlbnQgdG8gdC48L3A+CjxwPjIuIEZvciBhIGNvbnRhaW5lciB3aXRoIGVxdWl2YWxlbnQga2V5cywgdGhlIGFtb3J0aXplZCBjb25zdGFudCBjb21wbGV4aXR5Cmd1YXJhbnRlZSBpcyBvbmx5IHVzZWZ1bCBpZiBubyBrZXkgZXF1aXZhbGVudCB0byB0IGV4aXN0cyBpbiB0aGUgY29udGFpbmVyLgpPdGhlcndpc2UsIHRoZSBpbnNlcnRpb24gY291bGQgb2NjdXIgaW4gb25lIG9mIG11bHRpcGxlIGxvY2F0aW9ucywgYXQgbGVhc3Qgb25lCm9mIHdoaWNoIHdvdWxkIG5vdCBiZSByaWdodCBhZnRlciBwLjwvcD4KPHA+My4gQnkgZ3VhcmFudGVlaW5nIGFtb3J0aXplZCBjb25zdGFudCBjb21wbGV4aXR5IG9ubHkgd2hlbiB0IGlzIGluc2VydGVkCmFmdGVyIHAsIGl0IGlzIGltcG9zc2libGUgdG8gZ3VhcmFudGVlIGNvbnN0YW50IGNvbXBsZXhpdHkgaWYgdCBpcyBpbnNlcnRlZCBhdAp0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb250YWluZXIuIFN1Y2ggYSBwcm9ibGVtIHdvdWxkIG5vdCBleGlzdCBpZiBhbW9ydGl6ZWQKY29uc3RhbnQgY29tcGxleGl0eSB3YXMgZ3VhcmFudGVlZCBpZiB0IGlzIGluc2VydGVkIGJlZm9yZSBwLCBzaW5jZSB0aGVyZSBpcwphbHdheXMgc29tZSBwIGltbWVkaWF0ZWx5IGJlZm9yZSB3aGljaCBhbiBpbnNlcnQgY2FuIHRha2UgcGxhY2UuPC9wPgo8cD40LiBGb3IgYSBjb250YWluZXIgd2l0aCBlcXVpdmFsZW50IGtleXMsIHAgZG9lcyBub3QgYWxsb3cgc3BlY2lmaWNhdGlvbiBvZgp3aGVyZSB0byBpbnNlcnQgdGhlIGVsZW1lbnQsIGJ1dCByYXRoZXIgb25seSBhY3RzIGFzIGEgaGludCBmb3IgaW1wcm92aW5nCnBlcmZvcm1hbmNlLiBUaGlzIG5lZ2F0ZXMgdGhlIGFkZGVkIGZ1bmN0aW9uYWxpdHkgdGhhdCBwIHdvdWxkIHByb3ZpZGUgaWYgaXQKc3BlY2lmaWVkIHdoZXJlIHdpdGhpbiBhIHNlcXVlbmNlIG9mIGVxdWl2YWxlbnQga2V5cyB0aGUgaW5zZXJ0aW9uIHNob3VsZCBvY2N1ci4KU3BlY2lmeWluZyB0aGUgaW5zZXJ0IGxvY2F0aW9uIHByb3ZpZGVzIG1vcmUgY29udHJvbCB0byB0aGUgdXNlciwgd2hpbGUKcHJvdmlkaW5nIG5vIGRpc2FkdmFudGFnZSB0byB0aGUgY29udGFpbmVyIGltcGxlbWVudGF0aW9uLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMy4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHMiPiBbbGliLmFzc29jaWF0aXZlLnJlcW10c108L2E+IHBhcmFncmFwaCA3LCByZXBsYWNlIHRoZSByb3cgaW4gdGFibGUgNjkKZm9yIGEuaW5zZXJ0KHAsdCkgd2l0aCB0aGUgZm9sbG93aW5nIHR3byByb3dzOjwvcD4KPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjUiPgogIDx0Ym9keT48dHI+CiAgICA8dGQ+PGI+ZXhwcmVzc2lvbjwvYj48L3RkPgogICAgPHRkPjxiPnJldHVybiB0eXBlPC9iPjwvdGQ+CiAgICA8dGQ+PGI+cHJlL3Bvc3QtY29uZGl0aW9uPC9iPjwvdGQ+CiAgICA8dGQ+PGI+Y29tcGxleGl0eTwvYj48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPjx0dD5hX3VuaXEuaW5zZXJ0KHAsdCk8L3R0PjwvdGQ+CiAgICA8dGQ+PHR0Pml0ZXJhdG9yPC90dD48L3RkPgogICAgPHRkPmluc2VydHMgdCBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBubyBlbGVtZW50IHdpdGgga2V5IGVxdWl2YWxlbnQgdG8gdGhlCiAgICAgIGtleSBvZiB0LiByZXR1cm5zIHRoZSBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZWxlbWVudCB3aXRoIGtleSBlcXVpdmFsZW50CiAgICAgIHRvIHRoZSBrZXkgb2YgdC48L3RkPgogICAgPHRkPmxvZ2FyaXRobWljIGluIGdlbmVyYWwsIGJ1dCBhbW9ydGl6ZWQgY29uc3RhbnQgaWYgdCBpcyBpbnNlcnRlZCByaWdodAogICAgICBiZWZvcmUgcCBvciBwIHBvaW50cyB0byBhbiBlbGVtZW50IHdpdGgga2V5IGVxdWl2YWxlbnQgdG8gdC48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPjx0dD5hX2VxLmluc2VydChwLHQpPC90dD48L3RkPgogICAgPHRkPjx0dD5pdGVyYXRvcjwvdHQ+PC90ZD4KICAgIDx0ZD5pbnNlcnRzIHQgYW5kIHJldHVybnMgdGhlIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBuZXdseSBpbnNlcnRlZAogICAgICBlbGVtZW50LiB0IGlzIGluc2VydGVkIHJpZ2h0IGJlZm9yZSBwIGlmIGRvaW5nIHNvIHByZXNlcnZlcyB0aGUgY29udGFpbmVyCiAgICAgIG9yZGVyaW5nLjwvdGQ+CiAgICA8dGQ+bG9nYXJpdGhtaWMgaW4gZ2VuZXJhbCwgYnV0IGFtb3J0aXplZCBjb25zdGFudCBpZiB0IGlzIGluc2VydGVkIHJpZ2h0CiAgICAgIGJlZm9yZSBwLjwvdGQ+CiAgPC90cj4KPC90Ym9keT48L3RhYmxlPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRvbyBiaWcgYSBjaGFuZ2UuJm5ic3A7IEZ1cnRoZXJtb3JlLCBpbXBsZW1lbnRvcnMgcmVwb3J0IGNoZWNraW5nCmJvdGggYmVmb3JlIHAgYW5kIGFmdGVyIHAsIGFuZCBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGlzIGJlaGF2aW9yLjwvcD4KPGhyPgo8YSBuYW1lPSIxOTQiPjxoMz4xOTQuJm5ic3A7cmRidWYoKSBmdW5jdGlvbnMgcG9vcmx5IHNwZWNpZmllZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjQuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zIj4gW2xpYi5pb3NdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1N0ZXZlIENsYW1hZ2UmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NyBTZXAgMTk5OTwvcD4KPHA+SW4gY2xhc3NpYyBpb3N0cmVhbXMsIGJhc2UgY2xhc3MgaW9zIGhhZCBhbiByZGJ1ZiBmdW5jdGlvbiB0aGF0IHJldHVybmVkIGEKcG9pbnRlciB0byB0aGUgYXNzb2NpYXRlZCBzdHJlYW1idWYuIEVhY2ggZGVyaXZlZCBjbGFzcyBoYWQgaXRzIG93biByZGJ1ZgpmdW5jdGlvbiB0aGF0IHJldHVybmVkIGEgcG9pbnRlciBvZiBhIHR5cGUgcmVmbGVjdGluZyB0aGUgYWN0dWFsIHR5cGUgZGVyaXZlZApmcm9tIHN0cmVhbWJ1Zi4gQmVjYXVzZSBpbiBBUk0gQysrLCB2aXJ0dWFsIGZ1bmN0aW9uIG92ZXJyaWRlcyBoYWQgdG8gaGF2ZSB0aGUKc2FtZSByZXR1cm4gdHlwZSwgcmRidWYgY291bGQgbm90IGJlIHZpcnR1YWwuPC9wPgo8cD5JbiBzdGFuZGFyZCBpb3N0cmVhbXMsIHdlIHJldGFpbiB0aGUgbm9uLXZpcnR1YWwgcmRidWYgZnVuY3Rpb24gZGVzaWduLCBhbmQKaW4gYWRkaXRpb24gaGF2ZSBhbiBvdmVybG9hZGVkIHJkYnVmIGZ1bmN0aW9uIHRoYXQgc2V0cyB0aGUgYnVmZmVyIHBvaW50ZXIuClRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoZSBzZWNvbmQgZnVuY3Rpb24gdG8gYmUgdmlydHVhbCBub3IgdG8gYmUgaW1wbGVtZW50ZWQgaW4KZGVyaXZlZCBjbGFzc2VzLjwvcD4KPHA+TWlub3IgcXVlc3Rpb246IFdhcyB0aGVyZSBhIHNwZWNpZmljIHJlYXNvbiBub3QgdG8gbWFrZSB0aGUgb3JpZ2luYWwgcmRidWYKZnVuY3Rpb24gdmlydHVhbD88L3A+CjxwPk1ham9yIHByb2JsZW06IEZyaWVuZGx5IGNvbXBpbGVycyB3YXJuIGFib3V0IGZ1bmN0aW9ucyBpbiBkZXJpdmVkIGNsYXNzZXMKdGhhdCBoaWRlIGJhc2UtY2xhc3Mgb3ZlcmxvYWRzLiBBbnkgc3RhbmRhcmQgaW1wbGVtZW50YXRpb24gb2YgaW9zdHJlYW1zIHdpbGwKcmVzdWx0IGluIHN1Y2ggYSB3YXJuaW5nIG9uIGVhY2ggb2YgdGhlIGlvc3RyZWFtIGNsYXNzZXMsIGJlY2F1c2Ugb2YgdGhlCmlsbC1jb25zaWRlcmVkIGRlY2lzaW9uIHRvIG92ZXJsb2FkIHJkYnVmIG9ubHkgaW4gYSBiYXNlIGNsYXNzLjwvcD4KPHA+SW4gYWRkaXRpb24sIHVzZXJzIG9mIHRoZSBzZWNvbmQgcmRidWYgZnVuY3Rpb24gbXVzdCB1c2UgZXhwbGljaXQKcXVhbGlmaWNhdGlvbiBvciBhIGNhc3QgdG8gY2FsbCBpdCBmcm9tIGRlcml2ZWQgY2xhc3Nlcy4gQW4gZXhwbGljaXQKcXVhbGlmaWNhdGlvbiBvciBjYXN0IHRvIGJhc2ljX2lvcyB3b3VsZCBwcmV2ZW50IGFjY2VzcyB0byBhbnkgbGF0ZXIgb3ZlcnJpZGluZwp2ZXJzaW9uIGlmIHRoZXJlIHdhcyBvbmUuPC9wPgo8cD5XaGF0IEknZCBsaWtlIHRvIGRvIGluIGFuIGltcGxlbWVudGF0aW9uIGlzIGFkZCBhIHVzaW5nLSBkZWNsYXJhdGlvbiBmb3IgdGhlCnNlY29uZCByZGJ1ZiBmdW5jdGlvbiBpbiBlYWNoIGRlcml2ZWQgY2xhc3MuIEl0IHdvdWxkIGVsaW1pbmF0ZSB3YXJuaW5ncyBhYm91dApoaWRpbmcgZnVuY3Rpb25zLCBhbmQgd291bGQgZW5hYmxlIGFjY2VzcyB3aXRob3V0IHVzaW5nIGV4cGxpY2l0IHF1YWxpZmljYXRpb24uClN1Y2ggYSBjaGFuZ2UgSSBkb24ndCB0aGluayB3b3VsZCBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIGFueSB2YWxpZCBwcm9ncmFtLCBidXQKd291bGQgYWxsb3cgaW52YWxpZCBwcm9ncmFtcyB0byBjb21waWxlOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT4gZmlsZWJ1ZiBteWJ1ZjsKIGZzdHJlYW0gZjsKIGYucmRidWYobXlidWYpOyAvLyBzaG91bGQgYmUgYW4gZXJyb3IsIG5vIHZpc2libGUgcmRidWY8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5JJ2QgbGlrZSB0byBzdWdnZXN0IHRoaXMgcHJvYmxlbSBhcyBhIGRlZmVjdCwgd2l0aCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiB0bwpyZXF1aXJlIHRoZSBlcXVpdmFsZW50IG9mIGEgdXNpbmctZGVjbGFyYXRpb24gZm9yIHRoZSByZGJ1ZiBmdW5jdGlvbiB0aGF0IGlzIG5vdApyZXBsYWNlZCBpbiBhIGxhdGVyIGRlcml2ZWQgY2xhc3MuIFdlIGNvdWxkIGRpc2N1c3Mgd2hldGhlciByZXBsYWNpbmcgdGhlCmZ1bmN0aW9uIHNob3VsZCBiZSBhbGxvd2VkLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+Rm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhlIHN0YW5kYXJkIGlzIGNvcnJlY3QgYXMgd3JpdHRlbi4gVGhlcmUgaXMgYSBzdWJ0bGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBiYXNlCmNsYXNzIDx0dD4gcmRidWYoKTwvdHQ+IGFuZCBkZXJpdmVkIGNsYXNzIDx0dD5yZGJ1ZigpPC90dD4uIFRoZSBkZXJpdmVkCmNsYXNzIDx0dD4gcmRidWYoKTwvdHQ+IGFsd2F5cyByZXR1cm5zIHRoZSBvcmlnaW5hbCBzdHJlYW1idWYsIHdoZXJlYXMgdGhlIGJhc2UgY2xhc3MKPHR0PiByZGJ1ZigpPC90dD4gd2lsbCByZXR1cm4gdGhlICJjdXJyZW50IHN0cmVhbWJ1ZiIgaWYgdGhhdCBoYXMgYmVlbiBjaGFuZ2VkIGJ5IHRoZSB2YXJpYW50IHlvdSBtZW50aW9uLjwvcD4KCjxwPlBlcm1pc3Npb24gaXMgbm90IHJlcXVpcmVkIHRvIGFkZCBzdWNoIGFuIGV4dGVuc2lvbi4gIFNlZSAKMTcuNC40LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIubWVtYmVyLmZ1bmN0aW9ucyI+IFtsaWIubWVtYmVyLmZ1bmN0aW9uc108L2E+LjwvcD4KPGhyPgo8YSBuYW1lPSIxOTYiPjxoMz4xOTYuJm5ic3A7UGxhY2VtZW50IG5ldyBleGFtcGxlIGhhcyBhbGlnbm1lbnQgcHJvYmxlbXM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxOC41LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLm5ldy5kZWxldGUucGxhY2VtZW50Ij4gW2xpYi5uZXcuZGVsZXRlLnBsYWNlbWVudF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRHVwIj5EdXA8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SGVyYiBTdXR0ZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTUgRGVjIDE5OTg8L3A+CjxwPlRoZSBleGFtcGxlIGluIDE4LjUuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIubmV3LmRlbGV0ZS5wbGFjZW1lbnQiPiBbbGliLm5ldy5kZWxldGUucGxhY2VtZW50XTwvYT4gcGFyYWdyYXBoIDQgcmVhZHM6IDwvcD4KCjxibG9ja3F1b3RlPgoKPHA+W0V4YW1wbGU6IFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgY29uc3RydWN0aW5nIGFuIG9iamVjdCBhdCBhIGtub3duIGFkZHJlc3M6PGJyPgo8YnI+Cjx0dD4mbmJzcDsmbmJzcDsgY2hhciBwbGFjZVtzaXplb2YoU29tZXRoaW5nKV07PGJyPgombmJzcDsmbmJzcDsgU29tZXRoaW5nKiBwID0gbmV3IChwbGFjZSkgU29tZXRoaW5nKCk7PGJyPgo8YnI+CjwvdHQ+ZW5kIGV4YW1wbGVdIDwvcD4KCjwvYmxvY2txdW90ZT4KCjxwPlRoaXMgZXhhbXBsZSBoYXMgcG90ZW50aWFsIGFsaWdubWVudCBwcm9ibGVtcy4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5EdXBsaWNhdGU6IHNlZSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTE0Ij4xMTQ8L2E+LjwvcD4KPGhyPgo8YSBuYW1lPSIxOTciPjxoMz4xOTcuJm5ic3A7bWF4X3NpemUoKSB1bmRlcnNwZWNpZmllZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuZGVmYXVsdC5jb24ucmVxIj4gW2xpYi5kZWZhdWx0LmNvbi5yZXFdPC9hPiwgMjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMiPiBbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZHkgU2F3eWVyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIxIE9jdCAxOTk5PC9wPgo8cD5NdXN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBtYXhfc2l6ZSgpIGJlIHVuY2hhbmdlZCBmcm9tIGNhbGwgdG8gY2FsbD8gPC9wPgoKPHA+TXVzdCB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBtYXhfc2l6ZSgpIGJlIG1lYW5pbmdmdWw/IDwvcD4KCjxwPlBvc3NpYmxlIG1lYW5pbmdzIGlkZW50aWZpZWQgaW4gbGliLTY4Mjc6IDwvcD4KCjxwPjEpIFRoZSBsYXJnZXN0IGNvbnRhaW5lciB0aGUgaW1wbGVtZW50YXRpb24gY2FuIHN1cHBvcnQgZ2l2ZW4gImJlc3QKY2FzZSIgY29uZGl0aW9ucyAtIGkuZS4gYXNzdW1lIHRoZSBydW4tdGltZSBwbGF0Zm9ybSBpcyAiY29uZmlndXJlZCB0bwp0aGUgbWF4IiwgYW5kIG5vIG92ZXJoZWFkIGZyb20gdGhlIHByb2dyYW0gaXRzZWxmLiBUaGlzIG1heSBwb3NzaWJseQpiZSBkZXRlcm1pbmVkIGF0IHRoZSBwb2ludCB0aGUgbGlicmFyeSBpcyB3cml0dGVuLCBidXQgY2VydGFpbmx5IG5vCmxhdGVyIHRoYW4gY29tcGlsZSB0aW1lLjxicj4KPGJyPgoyKSBUaGUgbGFyZ2VzdCBjb250YWluZXIgdGhlIHByb2dyYW0gY291bGQgY3JlYXRlLCBnaXZlbiAiYmVzdCBjYXNlIgpjb25kaXRpb25zIC0gaS5lLiBzYW1lIHBsYXRmb3JtIGFzc3VtcHRpb25zIGFzICgxKSwgYnV0IHRha2UgaW50bwphY2NvdW50IGFueSBvdmVyaGVhZCBmb3IgZXhlY3V0aW5nIHRoZSBwcm9ncmFtIGl0c2VsZi4gKG9yLCByb3VnaGx5CiJzdG9yYWdlPXN0b3JhZ2Utc2l6ZW9mKHByb2dyYW0pIikuIFRoaXMgZG9lcyBOT1QgaW5jbHVkZSBhbnkgcmVzb3VyY2UKYWxsb2NhdGVkIGJ5IHRoZSBwcm9ncmFtLiBUaGlzIG1heSAob3IgbWF5IG5vdCkgYmUgZGV0ZXJtaW5hYmxlIGF0CmNvbXBpbGUgdGltZS48YnI+Cjxicj4KMykgVGhlIGxhcmdlc3QgY29udGFpbmVyIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSBjb3VsZApjcmVhdGUsIGdpdmVuIGtub3dsZWRnZSBvZiB0aGUgYWN0dWFsIHJ1bi10aW1lIHBsYXRmb3JtLCBidXQgYWdhaW4sCm5vdCB0YWtpbmcgaW50byBhY2NvdW50IGFueSBjdXJyZW50bHkgYWxsb2NhdGVkIHJlc291cmNlLiBUaGlzIGlzCnByb2JhYmx5IGJlc3QgZGV0ZXJtaW5lZCBhdCBwcm9ncmFtIHN0YXJ0LXVwLjxicj4KPGJyPgo0KSBUaGUgbGFyZ2VzdCBjb250YWluZXIgdGhlIGN1cnJlbnQgZXhlY3V0aW9uIHByb2dyYW0gY291bGQgY3JlYXRlIGF0CnRoZSBwb2ludCBtYXhfc2l6ZSgpIGlzIGNhbGxlZCAob3IgbW9yZSBjb3JyZWN0bHkgYXQgdGhlIHBvaW50Cm1heF9zaXplKCkgcmV0dXJucyA6LSksIGdpdmVuIGl0J3MgY3VycmVudCBlbnZpcm9ubWVudCAoaS5lLiB0YWtpbmcKaW50byBhY2NvdW50IHRoZSBhY3R1YWwgY3VycmVudGx5IGF2YWlsYWJsZSByZXNvdXJjZXMpLiBUaGlzLApvYnZpb3VzbHksIGhhcyB0byBiZSBkZXRlcm1pbmVkIGR5bmFtaWNhbGx5IGVhY2ggdGltZSBtYXhfc2l6ZSgpIGlzCmNhbGxlZC4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5tYXhfc2l6ZSgpIGlzbid0IHVzZWZ1bCBmb3IgdmVyeSBtYW55IHRoaW5ncywgYW5kIHRoZSBleGlzdGluZwogIHdvcmRpbmcgaXMgc3VmZmljaWVudGx5IGNsZWFyIGZvciB0aGUgZmV3IGNhc2VzIHRoYXQgbWF4X3NpemUoKSBjYW4KICBiZSB1c2VkIGZvci4gIE5vbmUgb2YgdGhlIGF0dGVtcHRzIHRvIGNoYW5nZSB0aGUgZXhpc3Rpbmcgd29yZGluZwogIHdlcmUgYW4gaW1wcm92ZW1lbnQuPC9wPgoKPHA+SXQgaXMgY2xlYXIgdG8gdGhlIExXRyB0aGF0IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBtYXhfc2l6ZSgpIGNhbid0CiAgY2hhbmdlIGZyb20gY2FsbCB0byBjYWxsLjwvcD4KCjxocj4KPGEgbmFtZT0iMjAzIj48aDM+MjAzLiZuYnNwO2Jhc2ljX2lzdHJlYW06OnNlbnRyeTo6c2VudHJ5KCkgaXMgdW5pbnN0YW50aWFibGUgd2l0aCBjdHlwZSZsdDt1c2VyLWRlZmluZWQgdHlwZSZndDs8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtOjpzZW50cnkiPiBbbGliLmlzdHJlYW06OnNlbnRyeV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBNY0NsdXJlIGFuZCBEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MSBKYW4gMjAwMDwvcD4KPHA+MjcuNi4xLjEuMiBQYXJhZ3JhcGggNCBzdGF0ZXM6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5UbyBkZWNpZGUgaWYgdGhlIGNoYXJhY3RlciBjIGlzIGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIsIHRoZSBjb25zdHJ1Y3RvciAgICAgIAogICAgIHBlcmZvcm1zICcnYXMgaWYnJyBpdCBleGVjdXRlcyB0aGUgZm9sbG93aW5nIGNvZGUgZnJhZ21lbnQ6Jm5ic3A7PC9wPgogIDxwcmU+Y29uc3QgY3R5cGUmbHQ7Y2hhclQmZ3Q7JmFtcDsgY3R5cGUgPSB1c2VfZmFjZXQmbHQ7Y3R5cGUmbHQ7Y2hhclQmZ3Q7ICZndDsoaXMuZ2V0bG9jKCkpOwppZiAoY3R5cGUuaXMoY3R5cGUuc3BhY2UsYykhPTApCi8vIGMgaXMgYSB3aGl0ZXNwYWNlIGNoYXJhY3Rlci48L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+IEJ1dCBUYWJsZSA1MSBpbiAyMi4xLjEuMS4xIG9ubHkgcmVxdWlyZXMgYW4gaW1wbGVtZW50YXRpb24gdG8KcHJvdmlkZSBzcGVjaWFsaXphdGlvbnMgZm9yIGN0eXBlJmx0O2NoYXImZ3Q7IGFuZApjdHlwZSZsdDt3Y2hhcl90Jmd0Oy4gIElmIHNlbnRyeSdzIGNvbnN0cnVjdG9yIGlzIGltcGxlbWVudGVkIHVzaW5nCmN0eXBlLCBpdCB3aWxsIGJlIHVuaW5zdGFudGlhYmxlIGZvciBhIHVzZXItZGVmaW5lZCBjaGFyYWN0ZXIgdHlwZQpjaGFyVCwgdW5sZXNzIHRoZSBpbXBsZW1lbnRhdGlvbiBoYXMgcHJvdmlkZWQgbm9uLXdvcmtpbmcgKHNpbmNlIGl0CndvdWxkIGJlIGltcG9zc2libGUgdG8gZGVmaW5lIGEgY29ycmVjdCBjdHlwZSZsdDtjaGFyVCZndDsgc3BlY2lhbGl6YXRpb24KZm9yIGFuIGFyYml0cmFyeSBjaGFyVCkgZGVmaW5pdGlvbnMgb2YgY3R5cGUncyB2aXJ0dWFsIG1lbWJlcgpmdW5jdGlvbnMuPC9wPgoKPHA+Ckl0IHNlZW1zIHRoZSBpbnRlbnQgdGhlIHN0YW5kYXJkIGlzIHRoYXQgc2VudHJ5IHNob3VsZCBiZWhhdmUsIGluCmV2ZXJ5IHJlc3BlY3QsIG5vdCBqdXN0IGR1cmluZyBleGVjdXRpb24sIGFzIGlmIGl0IHdlcmUgaW1wbGVtZW50ZWQKdXNpbmcgY3R5cGUsIHdpdGggdGhlIGJ1cmRlbiBvZiBwcm92aWRpbmcgYSBjdHlwZSBzcGVjaWFsaXphdGlvbgpmYWxsaW5nIG9uIHRoZSB1c2VyLiAgQnV0IGFzIGl0IGlzIHdyaXR0ZW4sIG5vdGhpbmcgcmVxdWlyZXMgdGhlCnRyYW5zbGF0aW9uIG9mIHNlbnRyeSdzIGNvbnN0cnVjdG9yIHRvIGJlaGF2ZSBhcyBpZiBpdCB1c2VkIHRoZSBhYm92ZQpjb2RlLCBhbmQgaXQgd291bGQgc2VlbSB0aGVyZWZvcmUsIHRoYXQgc2VudHJ5J3MgY29uc3RydWN0b3Igc2hvdWxkIGJlCmluc3RhbnRpYWJsZSBmb3IgYWxsIGNoYXJhY3RlciB0eXBlcy4KPC9wPgoKPHA+IApOb3RlOiBJZiBJIGhhdmUgbWlzaW50ZXJwcmV0ZWQgdGhlIGludGVudCBvZiB0aGUgc3RhbmRhcmQgd2l0aApyZXNwZWN0IHRvIHNlbnRyeSdzIGNvbnN0cnVjdG9yJ3MgaW5zdGFudGlhYmlsaXR5LCB0aGVuIGEgbm90ZSBzaG91bGQKYmUgYWRkZWQgdG8gdGhlIGZvbGxvd2luZyBlZmZlY3Q6CjwvcD4KCjxibG9ja3F1b3RlPgpBbiBpbXBsZW1lbnRhdGlvbiBpcyBmb3JiaWRkZW4gZnJvbSB1c2luZyB0aGUgYWJvdmUgY29kZSBpZiBpdCByZW5kZXJzCnRoZSBjb25zdHJ1Y3RvciB1bmluc3RhbnRpYWJsZSBmb3IgYW4gb3RoZXJ3aXNlIHZhbGlkIGNoYXJhY3Rlcgp0eXBlLgo8L2Jsb2NrcXVvdGU+Cgo8cD5JbiBhbnkgZXZlbnQsIHNvbWUgY2xhcmlmaWNhdGlvbiBpcyBuZWVkZWQuPC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+SXQgaXMgcG9zc2libGUgYnV0IG5vdCBlYXN5IHRvIGluc3RhbnRpYXRlIG9uIHR5cGVzIG90aGVyIHRoYW4gY2hhcgpvciB3Y2hhcl90OyBtYW55IHRoaW5ncyBoYXZlIHRvIGJlIGRvbmUgZmlyc3QuIFRoYXQgaXMgYnkgaW50ZW50aW9uCmFuZCBpcyBub3QgYSBkZWZlY3QuPC9wPgo8aHI+CjxhIG5hbWU9IjIwNCI+PGgzPjIwNC4mbmJzcDtkaXN0YW5jZShmaXJzdCwgbGFzdCkgd2hlbiAibGFzdCIgaXMgYmVmb3JlICJmaXJzdCI8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC4zLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLml0ZXJhdG9yLm9wZXJhdGlvbnMiPiBbbGliLml0ZXJhdG9yLm9wZXJhdGlvbnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1JpbnRhbGEgTWF0dGkmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjggSmFuIDIwMDA8L3A+CjxwPlNlY3Rpb24gMjQuMy40IGRlc2NyaWJlcyB0aGUgZnVuY3Rpb24gZGlzdGFuY2UoZmlyc3QsIGxhc3QpICh3aGVyZSBmaXJzdCBhbmQKbGFzdCBhcmUgaXRlcmF0b3JzKSB3aGljaCBjYWxjdWxhdGVzICJ0aGUgbnVtYmVyIG9mIGluY3JlbWVudHMgb3IKZGVjcmVtZW50cyBuZWVkZWQgdG8gZ2V0IGZyb20gJ2ZpcnN0JyB0byAnbGFzdCciLjwvcD4KPHA+VGhlIGZ1bmN0aW9uIHNob3VsZCB3b3JrIGZvciBmb3J3YXJkLCBiaWRpcmVjdGlvbmFsIGFuZCByYW5kb20gYWNjZXNzCml0ZXJhdG9ycywgYW5kIHRoZXJlIGlzIGEgcmVxdWlyZW1lbnQgMjQuMy40LjUgd2hpY2ggc3RhdGVzIHRoYXQgIidsYXN0JwptdXN0IGJlIHJlYWNoYWJsZSBmcm9tICdmaXJzdCciLjwvcD4KPHA+V2l0aCByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycyB0aGUgZnVuY3Rpb24gaXMgZWFzeSB0byBpbXBsZW1lbnQgYXMgImxhc3QKLSBmaXJzdCIuPC9wPgo8cD5XaXRoIGZvcndhcmQgaXRlcmF0b3JzIGl0J3MgY2xlYXIgdGhhdCAnZmlyc3QnIG11c3QgcG9pbnQgdG8gYSBwbGFjZSBiZWZvcmUKJ2xhc3QnLCBiZWNhdXNlIG90aGVyd2lzZSAnbGFzdCcgd291bGQgbm90IGJlIHJlYWNoYWJsZSBmcm9tICdmaXJzdCcuPC9wPgo8cD5CdXQgd2hhdCBhYm91dCBiaWRpcmVjdGlvbmFsIGl0ZXJhdG9ycz8gVGhlcmUgJ2xhc3QnIGlzIHJlYWNoYWJsZSBmcm9tCidmaXJzdCcgd2l0aCB0aGUgLS0gb3BlcmF0b3IgZXZlbiBpZiAnbGFzdCcgcG9pbnRzIHRvIGFuIGVhcmxpZXIgcG9zaXRpb24gdGhhbgonZmlyc3QnLiBIb3dldmVyLCBJIGNhbm5vdCBzZWUgaG93IHRoZSBkaXN0YW5jZSgpIGZ1bmN0aW9uIGNvdWxkIGJlIGltcGxlbWVudGVkCmlmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBrbm93IHdoaWNoIG9mIHRoZSBpdGVyYXRvcnMgcG9pbnRzIHRvIGFuIGVhcmxpZXIKcG9zaXRpb24gKHlvdSBjYW5ub3QgdXNlICsrIG9yIC0tIG9uIGVpdGhlciBpdGVyYXRvciBpZiB5b3UgZG9uJ3Qga25vdyB3aGljaApkaXJlY3Rpb24gaXMgdGhlICJzYWZlIHdheSB0byB0cmF2ZWwiKS48L3A+CjxwPlRoZSBwYXJhZ3JhcGggMjQuMy40LjEgc3RhdGVzIHRoYXQgImZvciAuLi4gYmlkaXJlY3Rpb25hbCBpdGVyYXRvcnMgdGhleQp1c2UgKysgdG8gcHJvdmlkZSBsaW5lYXIgdGltZSBpbXBsZW1lbnRhdGlvbnMiLiBIb3dldmVyLCB0aGUgKysgb3BlcmF0b3IgaXMKbm90IG1lbnRpb25lZCBpbiB0aGUgcmVhY2hhYmlsaXR5IHJlcXVpcmVtZW50LiBGdXJ0aGVybW9yZSAyNC4zLjQuNCBleHBsaWNpdGx5Cm1lbnRpb25zIHRoYXQgZGlzdGFuY2UoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgaW5jcmVtZW50cyBfb3IgZGVjcmVtZW50c18sCnN1Z2dlc3RpbmcgdGhhdCBpdCBjb3VsZCByZXR1cm4gYSBuZWdhdGl2ZSBudW1iZXIgYWxzbyBmb3IgYmlkaXJlY3Rpb25hbAppdGVyYXRvcnMgd2hlbiAnbGFzdCcgcG9pbnRzIHRvIGEgcG9zaXRpb24gYmVmb3JlICdmaXJzdCcuPC9wPgo8cD5JcyBhIGZ1cnRoZXIgcmVxdWlyZW1lbnQgaXMgbmVlZGVkIHRvIHN0YXRlIHRoYXQgZm9yIGZvcndhcmQgYW5kCmJpZGlyZWN0aW9uYWwgaXRlcmF0b3JzICInbGFzdCcgbXVzdCBiZSByZWFjaGFibGUgZnJvbSAnZmlyc3QnIHVzaW5nIHRoZSArKwpvcGVyYXRvciIuIE1heWJlIHRoaXMgcmVxdWlyZW1lbnQgbWlnaHQgYWxzbyBhcHBseSB0byByYW5kb20gYWNjZXNzCml0ZXJhdG9ycyBzbyB0aGF0IGRpc3RhbmNlKCkgd291bGQgd29yayB0aGUgc2FtZSB3YXkgZm9yIGV2ZXJ5IGl0ZXJhdG9yCmNhdGVnb3J5PzwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+IlJlYWNoYWJsZSIgaXMgZGVmaW5lZCBpbiB0aGUgc3RhbmRhcmQgaW4gMjQuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaXRlcmF0b3IucmVxdWlyZW1lbnRzIj4gW2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHNdPC9hPiBwYXJhZ3JhcGggNi4KVGhlIGRlZmluaXRpb24gaXMgb25seSBpbiB0ZXJtcyBvZiBvcGVyYXRvcisrKCkuIFRoZSBMV0cgc2VlcyBubyBkZWZlY3QgaW4KdGhlIHN0YW5kYXJkLjwvcD4KPGhyPgo8YSBuYW1lPSIyMDUiPjxoMz4yMDUuJm5ic3A7IG51bWVyaWNfbGltaXRzIHVuY2xlYXIgb24gaG93IHRvIGRldGVybWluZSBmbG9hdGluZyBwb2ludCB0eXBlczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE4LjIuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIubnVtZXJpYy5saW1pdHMubWVtYmVycyI+IFtsaWIubnVtZXJpYy5saW1pdHMubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7U3RldmUgQ2xlYXJ5Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI4IEphbiAyMDAwPC9wPgo8cD5JbiBzZXZlcmFsIHBsYWNlcyBpbiAxOC4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLm51bWVyaWMubGltaXRzLm1lbWJlcnMiPiBbbGliLm51bWVyaWMubGltaXRzLm1lbWJlcnNdPC9hPiwgYSBtZW1iZXIgaXMKZGVzY3JpYmVkIGFzICJNZWFuaW5nZnVsIGZvciBhbGwgZmxvYXRpbmcgcG9pbnQgdHlwZXMuIgpIb3dldmVyLCBubyBjbGVhciBtZXRob2Qgb2YgZGV0ZXJtaW5pbmcgYSBmbG9hdGluZyBwb2ludCB0eXBlIGlzCnByb3ZpZGVkLjwvcD4KCjxwPkluIDE4LjIuMS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIubnVtZXJpYy5zcGVjaWFsIj4gW2xpYi5udW1lcmljLnNwZWNpYWxdPC9hPiwgcGFyYWdyYXBoIDEgc3RhdGVzICIuIC4gLiAoZm9yCmV4YW1wbGUsIGVwc2lsb24oKSBpcyBvbmx5IG1lYW5pbmdmdWwgaWYgaXNfaW50ZWdlciBpcwpmYWxzZSkuIC4gLiIgd2hpY2ggc3VnZ2VzdHMgdGhhdCBhIHR5cGUgaXMgYSBmbG9hdGluZyBwb2ludCB0eXBlCmlmIGlzX3NwZWNpYWxpemVkIGlzIHRydWUgYW5kIGlzX2ludGVnZXIgaXMgZmFsc2U7IGhvd2V2ZXIsIHRoaXMgaXMKdW5jbGVhci48L3A+Cgo8cD5XaGVuIGNsYXJpZnlpbmcgdGhpcywgcGxlYXNlIGtlZXAgaW4gbWluZCB0aGlzIG5lZWQgb2YgdXNlcnM6IHdoYXQKZXhhY3RseSBpcyB0aGUgZGVmaW5pdGlvbiBvZiBmbG9hdGluZyBwb2ludD8gV291bGQgYSBmaXhlZCBwb2ludCBvcgpyYXRpb25hbCByZXByZXNlbnRhdGlvbiBiZSBjb25zaWRlcmVkIG9uZT8gSSBndWVzcyBteSBzdGF0ZW1lbnQgaGVyZQppcyB0aGF0IHRoZXJlIGNvdWxkIGFsc28gYmUgdHlwZXMgdGhhdCBhcmUgbmVpdGhlciBpbnRlZ2VyIG9yCihzdHJpY3RseSkgZmxvYXRpbmcgcG9pbnQuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5JdCBpcyB1cCB0byB0aGUgaW1wbGVtZW50b3Igb2YgYSB1c2VyIGRlZmluZSB0eXBlIHRvIGRlY2lkZSBpZiBpdCBpcyBhCmZsb2F0aW5nIHBvaW50IHR5cGUuPC9wPgo8aHI+CjxhIG5hbWU9IjIwNyI+PGgzPjIwNy4mbmJzcDtjdHlwZSZsdDtjaGFyJmd0OyBtZW1iZXJzIHJldHVybiBjbGF1c2UgaW5jb21wbGV0ZTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMS4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5jdHlwZS5jaGFyLm1lbWJlcnMiPiBbbGliLmZhY2V0LmN0eXBlLmNoYXIubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRHVwIj5EdXA8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7Um9iZXJ0IEtsYXJlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyIE5vdiAxOTk5PC9wPgo8cD4KVGhlIDx0dD53aWRlbjwvdHQ+IGFuZCA8dHQ+bmFycm93PC90dD4gbWVtYmVyIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkCmluIDIyLjIuMS4zLjIsIHBhcmFncmFwaHMgOS0xMS4gIEluIGVhY2ggY2FzZSB3ZSBoYXZlIHR3byBvdmVybG9hZGVkCnNpZ25hdHVyZXMgZm9sbG93ZWQgYnkgYSA8Yj5SZXR1cm5zPC9iPiBjbGF1c2UuICBUaGUgPGI+UmV0dXJuczwvYj4KY2xhdXNlIG9ubHkgZGVzY3JpYmVzIG9uZSBvZiB0aGUgb3ZlcmxvYWRzLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoZSByZXR1cm5zIGNsYXVzZSBpbiAyMi4yLjEuMy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQuY3R5cGUuY2hhci5tZW1iZXJzIj4gW2xpYi5mYWNldC5jdHlwZS5jaGFyLm1lbWJlcnNdPC9hPgpwYXJhZ3JhcGggMTAgZnJvbTo8L3A+CjxwPiZuYnNwOyZuYnNwOyZuYnNwOyBSZXR1cm5zOiBkb193aWRlbihsb3csIGhpZ2gsIHRvKS48L3A+Cgo8cD50bzo8L3A+CjxwPiZuYnNwOyZuYnNwOyZuYnNwOyBSZXR1cm5zOiBkb193aWRlbihjKSBvciBkb193aWRlbihsb3csIGhpZ2gsIHRvKSwgCnJlc3BlY3RpdmVseS48L3A+Cgo8cD5DaGFuZ2UgdGhlIHJldHVybnMgY2xhdXNlIGluIDIyLjIuMS4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5jdHlwZS5jaGFyLm1lbWJlcnMiPiBbbGliLmZhY2V0LmN0eXBlLmNoYXIubWVtYmVyc108L2E+IHBhcmFncmFwaCAxMQpmcm9tOjwvcD4gCjxwPiZuYnNwOyZuYnNwOyZuYnNwOyBSZXR1cm5zOiBkb19uYXJyb3cobG93LCBoaWdoLCB0bykuPC9wPgoKPHA+dG86PC9wPgo8cD4mbmJzcDsmbmJzcDsmbmJzcDsgUmV0dXJuczogZG9fbmFycm93KGMpIG9yIGRvX25hcnJvdyhsb3csIGhpZ2gsIHRvKSwgCnJlc3BlY3RpdmVseS48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5TdWJzdW1lZCBieSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTUzIj4xNTM8L2E+LCB3aGljaCBhZGRyZXNzZXMgdGhlIHNhbWUKcGFyYWdyYXBocy48L3A+Cjxocj4KPGEgbmFtZT0iMjEzIj48aDM+MjEzLiZuYnNwO01hdGggZnVuY3Rpb24gb3ZlcmxvYWRzIGFtYmlndW91czwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI2LjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIubnVtYXJyYXkiPiBbbGliLm51bWFycmF5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOaWNvIEpvc3V0dGlzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI2IEZlYiAyMDAwPC9wPgo8cD5EdWUgdG8gdGhlIGFkZGl0aW9uYWwgb3ZlcmxvYWRlZCB2ZXJzaW9ucyBvZiBudW1lcmljIGZ1bmN0aW9ucyBmb3IKZmxvYXQgYW5kIGxvbmcgZG91YmxlIGFjY29yZGluZyB0byBTZWN0aW9uIDI2LjUsIGNhbGxzIHN1Y2ggYXMgaW50IHg7CnN0ZDo6cG93ICh4LCA0KSBhcmUgYW1iaWd1b3VzIG5vdyBpbiBhIHN0YW5kYXJkIGNvbmZvcm1pbmcKaW1wbGVtZW50YXRpb24uIEN1cnJlbnQgaW1wbGVtZW50YXRpb25zIHNvbHZlIHRoaXMgcHJvYmxlbSB2ZXJ5CmRpZmZlcmVudCAob3ZlcmxvYWQgZm9yIGFsbCB0eXBlcywgZG9uJ3Qgb3ZlcmxvYWQgZm9yIGZsb2F0IGFuZCBsb25nCmRvdWJsZSwgdXNlIHByZXByb2Nlc3NvciwgZm9sbG93IHRoZSBzdGFuZGFyZCBhbmQgZ2V0CmFtYmlndWl0aWVzKS48L3A+IDxwPlRoaXMgYmVoYXZpb3Igc2hvdWxkIGJlIHN0YW5kYXJkaXplZCBvciBhdCBsZWFzdAppZGVudGlmaWVkIGFzIGltcGxlbWVudGF0aW9uIGRlZmluZWQuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGVzZSBtYXRoIGlzc3VlcyBhcmUgYW4KdW5kZXJzdG9vZCBhbmQgYWNjZXB0ZWQgY29uc2VxdWVuY2Ugb2YgdGhlIGRlc2lnbi4gVGhleSBoYXZlCmJlZW4gZGlzY3Vzc2VkIHNldmVyYWwgdGltZXMgaW4gdGhlIHBhc3QuIFVzZXJzIG11c3Qgd3JpdGUgY2FzdHMKb3Igd3JpdGUgZmxvYXRpbmcgcG9pbnQgZXhwcmVzc2lvbnMgYXMgYXJndW1lbnRzLjwvcD4KPGhyPgo8YSBuYW1lPSIyMTUiPjxoMz4yMTUuJm5ic3A7Q2FuIGEgbWFwJ3Mga2V5X3R5cGUgYmUgY29uc3Q/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0p1ZHkgV2FyZCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBGZWIgMjAwMDwvcD4KPHA+QSB1c2VyIG5vdGljZWQgdGhhdCB0aGlzIGRvZXNuJ3QgY29tcGlsZSB3aXRoIHRoZSBSb2d1ZSBXYXZlIGxpYnJhcnkgYmVjYXVzZQp0aGUgcmJfdHJlZSBjbGFzcyBkZWNsYXJlcyBhIGtleV9hbGxvY2F0b3IsIGFuZCBhbGxvY2F0b3ImbHQ7Y29uc3QgaW50Jmd0OyBpcwpub3QgbGVnYWwsIEkgdGhpbms6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPm1hcCAmbHQ7IGNvbnN0IGludCwgLi4uICZndDsgLy8gbGVnYWw/PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+d2hpY2ggbWFkZSBtZSB3b25kZXIgd2hldGhlciBpdCBpcyBsZWdhbCBmb3IgYSBtYXAncyBrZXlfdHlwZSB0byBiZSBjb25zdC4gSW4KZW1haWwgZnJvbSBNYXR0IEF1c3Rlcm4gaGUgc2FpZDo8L3A+CjxibG9ja3F1b3RlPgo8cD5JJ20gbm90IHN1cmUgd2hldGhlciBpdCdzIGxlZ2FsIHRvIGRlY2xhcmUgYSBtYXAgd2l0aCBhIGNvbnN0IGtleSB0eXBlLiBJCmhhZG4ndCB0aG91Z2h0IGFib3V0IHRoYXQgcXVlc3Rpb24gdW50aWwgYSBjb3VwbGUgd2Vla3MgYWdvLiBNeSBpbnR1aXRpdmUKZmVlbGluZyBpcyB0aGF0IGl0IG91Z2h0IG5vdCB0byBiZSBhbGxvd2VkLCBhbmQgdGhhdCB0aGUgc3RhbmRhcmQgb3VnaHQgdG8gc2F5CnNvLiBJdCBkb2VzIHR1cm4gb3V0IHRvIHdvcmsgaW4gU0dJJ3MgbGlicmFyeSwgdGhvdWdoLCBhbmQgc29tZW9uZSBpbiB0aGUKY29tcGlsZXIgZ3JvdXAgZXZlbiB1c2VkIGl0LiBQZXJoYXBzIHRoaXMgZGVzZXJ2ZXMgdG8gYmUgd3JpdHRlbiB1cCBhcyBhbiBpc3N1ZQp0b28uPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSAia2V5IGlzIGFzc2lnbmFibGUiIHJlcXVpcmVtZW50IGZyb20gdGFibGUgNjkgaW4KMjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiBhbHJlYWR5IGltcGxpZXMgdGhlIGtleSBjYW5ub3QgYmUgY29uc3QuPC9wPgo8aHI+CjxhIG5hbWU9IjIxNiI+PGgzPjIxNi4mbmJzcDtzZXRiYXNlIG1hbmlwdWxhdG9yIGRlc2NyaXB0aW9uIGZsYXdlZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RkLm1hbmlwIj4gW2xpYi5zdGQubWFuaXBdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0R1cCI+RHVwPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0h5bWFuIFJvc2VuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI5IEZlYiAyMDAwPC9wPgo8cD4yNy42LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0ZC5tYW5pcCI+IFtsaWIuc3RkLm1hbmlwXTwvYT4gcGFyYWdyYXBoIDUgc2F5czo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPnNtYW5pcCBzZXRiYXNlKGludCBiYXNlKTs8L3ByZT4KPHA+IFJldHVybnM6IEFuIG9iamVjdCBzIG9mIHVuc3BlY2lmaWVkIHR5cGUgc3VjaCB0aGF0IGlmIG91dCBpcyBhbgooaW5zdGFuY2Ugb2YpIGJhc2ljX29zdHJlYW0gdGhlbiB0aGUgZXhwcmVzc2lvbiBvdXQmbHQ7Jmx0O3MgYmVoYXZlcwphcyBpZiBmKHMpIHdlcmUgY2FsbGVkLCBpbiBpcyBhbiAoaW5zdGFuY2Ugb2YpIGJhc2ljX2lzdHJlYW0gdGhlbiB0aGUKZXhwcmVzc2lvbiBpbiZndDsmZ3Q7cyBiZWhhdmVzIGFzIGlmIGYocykgd2VyZSBjYWxsZWQuIFdoZXJlIGYgY2FuIGJlCmRlZmluZWQgYXM6PC9wPgo8cHJlPmlvc19iYXNlJmFtcDsgZihpb3NfYmFzZSZhbXA7IHN0ciwgaW50IGJhc2UpCnsKICAvLyBzZXQgYmFzZWZpZWxkCiAgc3RyLnNldGYobiA9PSA4ID8gaW9zX2Jhc2U6Om9jdCA6CiAgICAgICAgICAgICAgICBuID09IDEwID8gaW9zX2Jhc2U6OmRlYyA6CiAgICAgICAgICAgICAgICBuID09IDE2ID8gaW9zX2Jhc2U6OmhleCA6CiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncygwKSwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgcmV0dXJuIHN0cjsKfTwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPlRoZXJlIGFyZSB0d28gcHJvYmxlbXMgaGVyZS4gRmlyc3QsIGYgdGFrZXMgdHdvIHBhcmFtZXRlcnMsIHNvIHRoZQpkZXNjcmlwdGlvbiBuZWVkcyB0byBzYXkgdGhhdCBvdXQmbHQ7Jmx0O3MgYW5kIGluJmd0OyZndDtzIGJlaGF2ZSBhcyBpZiBmKHMsYmFzZSkKaGFkIGJlZW4gY2FsbGVkLiBTZWNvbmQsIGYgaXMgaGFzIGEgcGFyYW1ldGVyIG5hbWVkIGJhc2UsIGJ1dCBpcyB3cml0dGVuIGFzIGlmCnRoZSBwYXJhbWV0ZXIgd2FzIG5hbWVkIG4uPC9wPgo8cD5BY3R1YWxseSwgdGhlcmUncyBhIHRoaXJkIHByb2JsZW0uIFRoZSBwYXJhZ3JhcGggaGFzIGdyYW1tYXRpY2FsIGVycm9ycy4KVGhlcmUgbmVlZHMgdG8gYmUgYW4gImFuZCIgYWZ0ZXIgdGhlIGZpcnN0IGNvbW1hLCBhbmQgdGhlICJXaGVyZQpmIiBzZW50ZW5jZSBmcmFnbWVudCBuZWVkcyB0byBiZSBtZXJnZWQgaW50byBpdHMgcHJlY2VkaW5nIHNlbnRlbmNlLiBZb3UKbWF5IGFsc28gd2FudCB0byBmb3JtYXQgdGhlIGZ1bmN0aW9uIGEgbGl0dGxlIGJldHRlci4gVGhlIGZvcm1hdHRpbmcgYWJvdmUgaXMKbW9yZS1vci1sZXNzIHdoYXQgdGhlIFN0YW5kYXJkIGNvbnRhaW5zLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIHJlc29sdXRpb24gb2YgdGhpcyBkZWZlY3QgaXMgc3Vic3VtZWQgYnkgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gZm9yCmlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxOTMiPjE5MzwvYT4uPC9wPgoKPHA+PGk+W1Rva3lvOiBUaGUgTFdHIGFncmVlcyB0aGF0IHRoaXMgaXMgYSBkZWZlY3QgYW5kIG5vdGVzIHRoYXQgaXQKb2NjdXJzIGFkZGl0aW9uYWwgcGxhY2VzIGluIHRoZSBzZWN0aW9uLCBhbGwgcmVxdWlyaW5nIGZpeGVzLl08L2k+PC9wPgo8aHI+CjxhIG5hbWU9IjIxOCI+PGgzPjIxOC4mbmJzcDtBbGdvcml0aG1zIGRvIG5vdCB1c2UgYmluYXJ5IHByZWRpY2F0ZSBvYmplY3RzIGZvciBkZWZhdWx0IGNvbXBhcmlzb25zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5zb3J0aW5nIj4gW2xpYi5hbGcuc29ydGluZ108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7UGFibG8gSGFscGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IE1hciAyMDAwPC9wPgo8cD5NYW55IG9mIHRoZSBhbGdvcml0aG1zIHRha2UgYW4gYXJndW1lbnQsIHByZWQsIG9mIHRlbXBsYXRlIHBhcmFtZXRlciB0eXBlCkJpbmFyeVByZWRpY2F0ZSBvciBhbiBhcmd1bWVudCBjb21wIG9mIHRlbXBsYXRlIHBhcmFtZXRlciB0eXBlIENvbXBhcmUuIFRoZXNlCmFsZ29yaXRobXMgdXN1YWxseSBoYXZlIGFuIG92ZXJsb2FkZWQgdmVyc2lvbiB0aGF0IGRvZXMgbm90IHRha2UgdGhlIHByZWRpY2F0ZQphcmd1bWVudC4gSW4gdGhlc2UgY2FzZXMgcHJlZCBpcyB1c3VhbGx5IHJlcGxhY2VkIGJ5IHRoZSB1c2Ugb2Ygb3BlcmF0b3I9PSBhbmQKY29tcCBpcyByZXBsYWNlZCBieSB0aGUgdXNlIG9mIG9wZXJhdG9yJmx0Oy48L3A+CjxwPlRoaXMgdXNlIG9mIGhhcmQtY29kZWQgb3BlcmF0b3JzIGlzIGluY29uc2lzdGVudCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZQpsaWJyYXJ5LCBwYXJ0aWN1bGFybHkgdGhlIGNvbnRhaW5lcnMgbGlicmFyeSwgd2hlcmUgZXF1YWxpdHkgaXMgZXN0YWJsaXNoZWQKdXNpbmcgZXF1YWxfdG8mbHQ7Jmd0OyBhbmQgb3JkZXJpbmcgaXMgZXN0YWJsaXNoZWQgdXNpbmcgbGVzcyZsdDsmZ3Q7LiBXb3JzZSwKdGhlIHVzZSBvZiBvcGVyYXRvciZsdDssIHdvdWxkIGNhdXNlIHRoZSBmb2xsb3dpbmcgaW5ub2NlbnQtbG9va2luZyBjb2RlIHRvIGhhdmUKdW5kZWZpbmVkIGJlaGF2aW9yOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT52ZWN0b3ImbHQ7c3RyaW5nKiZndDsgdmVjOwpzb3J0KHZlYy5iZWdpbigpLCB2ZWMuZW5kKCkpOzwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPlRoZSB1c2Ugb2Ygb3BlcmF0b3ImbHQ7IGlzIG5vdCBkZWZpbmVkIGZvciBwb2ludGVycyB0byB1bnJlbGF0ZWQgb2JqZWN0cy4gSWYKc3RkOjpzb3J0IHVzZWQgbGVzcyZsdDsmZ3Q7IHRvIGNvbXBhcmUgZWxlbWVudHMsIHRoZW4gdGhlIGFib3ZlIGNvZGUgd291bGQgYmUKd2VsbC1kZWZpbmVkLCBzaW5jZSBsZXNzJmx0OyZndDsgaXMgZXhwbGljaXRseSBzcGVjaWFsaXplZCB0byBwcm9kdWNlIGEgdG90YWwKb3JkZXJpbmcgb2YgcG9pbnRlcnMuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGlzIHVzZSBvZiBvcGVyYXRvcj09IGFuZCBvcGVyYXRvciZsdDsgd2FzIGEgdmVyeSBkZWxpYmVyYXRlLCBjb25zY2lvdXMsIGFuZApleHBsaWNpdGx5IG1hZGUgZGVzaWduIGRlY2lzaW9uOyB0aGVzZSBvcGVyYXRvcnMgYXJlIG9mdGVuIG1vcmUgZWZmaWNpZW50LiBUaGUKcHJlZGljYXRlIGZvcm1zIGFyZSBhdmFpbGFibGUgZm9yIHVzZXJzIHdobyBkb24ndCB3YW50IHRvIHJlbHkgb24gb3BlcmF0b3I9PSBhbmQKb3BlcmF0b3ImbHQ7LjwvcD4KPGhyPgo8YSBuYW1lPSIyMTkiPjxoMz4yMTkuJm5ic3A7ZmluZCBhbGdvcml0aG0gbWlzc2luZyB2ZXJzaW9uIHRoYXQgdGFrZXMgYSBiaW5hcnkgcHJlZGljYXRlIGFyZ3VtZW50PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLmZpbmQiPiBbbGliLmFsZy5maW5kXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNGdXR1cmUiPkZ1dHVyZTwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtQYWJsbyBIYWxwZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgTWFyIDIwMDA8L3A+CjxwPlRoZSBmaW5kIGZ1bmN0aW9uIGFsd2F5cyBzZWFyY2hlcyBmb3IgYSB2YWx1ZSB1c2luZyBvcGVyYXRvcj09IHRvIGNvbXBhcmUgdGhlCnZhbHVlIGFyZ3VtZW50IHRvIGVhY2ggZWxlbWVudCBpbiB0aGUgaW5wdXQgaXRlcmF0b3IgcmFuZ2UuIFRoaXMgaXMgaW5jb25zaXN0ZW50CndpdGggb3RoZXIgZmluZC1yZWxhdGVkIGZ1bmN0aW9ucyBzdWNoIGFzIGZpbmRfZW5kIGFuZCBmaW5kX2ZpcnN0X29mLCB3aGljaAphbGxvdyB0aGUgY2FsbGVyIHRvIHNwZWNpZnkgYSBiaW5hcnkgcHJlZGljYXRlIG9iamVjdCB0byBiZSB1c2VkIGZvciBkZXRlcm1pbmluZwplcXVhbGl0eS4gVGhlIGZhY3QgdGhhdCB0aGlzIGNhbiBiZSBhY2NvbXBsaXNoZWQgdXNpbmcgYSBjb21iaW5hdGlvbiBvZiBmaW5kX2lmCmFuZCBiaW5kXzFzdCBvciBiaW5kXzJuZCBkb2VzIG5vdCBuZWdhdGUgdGhlIGRlc2lyYWJpbGl0eSBvZiBhIGNvbnNpc3RlbnQsCnNpbXBsZSwgYWx0ZXJuYXRpdmUgaW50ZXJmYWNlIHRvIGZpbmQuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxibG9ja3F1b3RlPgo8cD5JbiBzZWN0aW9uIDI1LjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5maW5kIj4gW2xpYi5hbGcuZmluZF08L2E+LCBhZGQgYSBzZWNvbmQgcHJvdG90eXBlIGZvciBmaW5kCihiZXR3ZWVuIHRoZSBleGlzdGluZyBwcm90b3R5cGUgYW5kIHRoZSBwcm90b3R5cGUgZm9yIGZpbmRfaWYpLCBhcwpmb2xsb3dzOjwvcD4KPHByZT4gICAgdGVtcGxhdGUmbHQ7Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgVCwgY2xhc3MgQmluYXJ5UHJlZGljYXRlJmd0OwogICAgICBJbnB1dEl0ZXJhdG9yIGZpbmQoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCZhbXA7IHZhbHVlLCBCaW5hcnlQcmVkaWNhdGUgYmluX3ByZWQpOzwvcHJlPgo8cD5DaGFuZ2UgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSByZXR1cm4gZnJvbTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPlJldHVybnM6IFRoZSBmaXJzdCBpdGVyYXRvciBpIGluIHRoZSByYW5nZSBbZmlyc3QsIGxhc3QpIGZvciB3aGljaCB0aGUgZm9sbG93aW5nIGNvcnJlc3BvbmRpbmcKICBjb25kaXRpb25zIGhvbGQ6ICppID09IHZhbHVlLCBwcmVkKCppKSAhPSBmYWxzZS4gUmV0dXJucyBsYXN0IGlmIG5vIHN1Y2ggaXRlcmF0b3IgaXMgZm91bmQuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPiZuYnNwO3RvOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+UmV0dXJuczogVGhlIGZpcnN0IGl0ZXJhdG9yIGkgaW4gdGhlIHJhbmdlIFtmaXJzdCwgbGFzdCkgZm9yIHdoaWNoIHRoZSBmb2xsb3dpbmcmbmJzcDsKICBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbiBob2xkczogKmkgPT0gdmFsdWUsIGJpbl9wcmVkKCppLHZhbHVlKSAhPSBmYWxzZSwgcHJlZCgqKQogICE9IGZhbHNlLiBSZXR1cm4gbGFzdCBpZiBubyBzdWNoIGl0ZXJhdG9yIGlzIGZvdW5kLjwvcD4KPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGlzIGlzIHJlcXVlc3QgZm9yIGEgcHVyZSBleHRlbnNpb24sIHNvIGl0IGlzIG5vdCBhIGRlZmVjdCBpbiB0aGUKY3VycmVudCBzdGFuZGFyZC4mbmJzcDsgQXMgdGhlIHN1Ym1pdHRlciBwb2ludGVkIG91dCwgInRoaXMgY2FuCmJlIGFjY29tcGxpc2hlZCB1c2luZyBhIGNvbWJpbmF0aW9uIG9mIGZpbmRfaWYgYW5kIGJpbmRfMXN0IG9yCmJpbmRfMm5kIi48L3A+Cjxocj4KPGEgbmFtZT0iMjM2Ij48aDM+MjM2LiZuYnNwO2N0eXBlJmx0O2NoYXImZ3Q7OjppcygpIG1lbWJlciBtb2RpZmllcyBmYWNldDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMS4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5jdHlwZS5jaGFyLm1lbWJlcnMiPiBbbGliLmZhY2V0LmN0eXBlLmNoYXIubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRHVwIj5EdXA8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGlldG1hciBL/GhsJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI0IEFwciAyMDAwPC9wPgo8cD5UaGUgZGVzY3JpcHRpb24gb2YgdGhlIDx0dD5pcygpPC90dD4gbWVtYmVyIGluIHBhcmFncmFwaCA0IG9mIDIyLjIuMS4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5jdHlwZS5jaGFyLm1lbWJlcnMiPiBbbGliLmZhY2V0LmN0eXBlLmNoYXIubWVtYmVyc108L2E+IGlzIGJyb2tlbjogQWNjb3JkaW5nIHRvIHRoaXMgZGVzY3JpcHRpb24sIHRoZQpzZWNvbmQgZm9ybSBvZiB0aGUgPHR0PmlzKCk8L3R0PiBtZXRob2QgbW9kaWZpZXMgdGhlIG1hc2tzIGluIHRoZQo8dHQ+Y3R5cGU8L3R0PiBvYmplY3QuIFRoZSBjb3JyZWN0IHNlbWFudGljcyBpZiwgb2YgY291cnNlLCB0byBvYnRhaW4KYW4gYXJyYXkgb2YgbWFza3MuIFRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZCBpbiB0aGUgZ2VuZXJhbCBjYXNlLAppZS4gdGhlIDx0dD5kb19pcygpPC90dD4gbWV0aG9kIGFzIGRlc2NyaWJlZCBpbiAyMi4yLjEuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmN0eXBlLnZpcnR1YWxzIj4gW2xpYi5sb2NhbGUuY3R5cGUudmlydHVhbHNdPC9hPiBwYXJhZ3JhcGggMSBkb2VzIHRoZSByaWdodCB0aGluZy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KICA8cD5DaGFuZ2UgcGFyYWdyYXBoIDQgZnJvbTwvcD4KICAgIDxibG9ja3F1b3RlPgogICAgVGhlIHNlY29uZCBmb3JtLCBmb3IgYWxsICpwIGluIHRoZSByYW5nZSBbbG93LCBoaWdoKSwgYXNzaWducwogICAgdmVjW3AtbG93XSB0byB0YWJsZSgpWyh1bnNpZ25lZCBjaGFyKSpwXS4KICAgIDwvYmxvY2txdW90ZT4KICA8cD50byBiZWNvbWU8L3A+CiAgICA8YmxvY2txdW90ZT4KICAgIFRoZSBzZWNvbmQgZm9ybSwgZm9yIGFsbCAqcCBpbiB0aGUgcmFuZ2UgW2xvdywgaGlnaCksIGFzc2lnbnMKICAgIHRhYmxlKClbKHVuc2lnbmVkIGNoYXIpKnBdIHRvIHZlY1twLWxvd10uCiAgPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+RHVwbGljYXRlLiAgU2VlIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyOCI+Mjg8L2E+LjwvcD4KPGhyPgo8YSBuYW1lPSIyNDQiPjxoMz4yNDQuJm5ic3A7TXVzdCA8dHQ+ZmluZDwvdHQ+J3MgdGhpcmQgYXJndW1lbnQgYmUgQ29weUNvbnN0cnVjdGlibGU/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLmZpbmQiPiBbbGliLmFsZy5maW5kXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmRyZXcgS29lbmlnJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzAyIE1heSAyMDAwPC9wPgo8cD5JcyB0aGUgZm9sbG93aW5nIGltcGxlbWVudGF0aW9uIG9mIDx0dD5maW5kPC90dD4gYWNjZXB0YWJsZT88L3A+Cgo8cHJlPiAgICAgICAgdGVtcGxhdGUmbHQ7Y2xhc3MgSXRlciwgY2xhc3MgWCZndDsKICAgICAgICBJdGVyIGZpbmQoSXRlciBiZWdpbiwgSXRlciBlbmQsIGNvbnN0IFgmYW1wOyB4KQogICAgICAgIHsKICAgICAgICAgICAgWCB4MSA9IHg7ICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBjcnVjaWFsIHN0YXRlbWVudAogICAgICAgICAgICB3aGlsZSAoYmVnaW4gIT0gZW5kICZhbXA7JmFtcDsgKmJlZ2luICE9IHgxKQogICAgICAgICAgICAgICAgKytiZWdpbjsKICAgICAgICAgICAgcmV0dXJuIGJlZ2luOwogICAgICAgIH0KPC9wcmU+Cgo8cD5JZiB0aGUgYW5zd2VyIGlzIHllcywgdGhlbiBpdCBpcyBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgYXMgdG8Kd2hldGhlciB0aGUgZm9sbG93aW5nIGZyYWdtZW50IGlzIHdlbGwgZm9ybWVkOjwvcD4KCjxwcmU+ICAgICAgICB2ZWN0b3ImbHQ7c3RyaW5nJmd0OyB2OwoKICAgICAgICBmaW5kKHYuYmVnaW4oKSwgdi5lbmQoKSwgImZvbyIpOwo8L3ByZT4KCjxwPkF0IGlzc3VlIGlzIHdoZXRoZXIgdGhlcmUgaXMgYSByZXF1aXJlbWVudCB0aGF0IHRoZSB0aGlyZCBhcmd1bWVudApvZiBmaW5kIGJlIENvcHlDb25zdHJ1Y3RpYmxlLiAgVGhlcmUgbWF5IGJlIG5vIHByb2JsZW0gaGVyZSwgYnV0CmFuYWx5c2lzIGlzIG5lY2Vzc2FyeS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZXJlIGlzIG5vIGluZGljYXRpb24gaW4gdGhlIHN0YW5kYXJkIHRoYXQgZmluZCdzIHRoaXJkIGFyZ3VtZW50CmlzIHJlcXVpcmVkIHRvIGJlIENvcHkgQ29uc3RydWN0aWJsZS4gIFRoZSBMV0cgYmVsaWV2ZXMgdGhhdCBubyBzdWNoCnJlcXVpcmVtZW50IHdhcyBpbnRlbmRlZC4gIEFzIG5vdGVkIGFib3ZlLCB0aGVyZSBhcmUgdGltZXMgd2hlbiBhIHVzZXIKbWlnaHQgcmVhc29uYWJseSBwYXNzIGFuIGFyZ3VtZW50IHRoYXQgaXMgbm90IENvcHkgQ29uc3RydWN0aWJsZS48L3A+Cjxocj4KPGEgbmFtZT0iMjQ1Ij48aDM+MjQ1LiZuYnNwO1doaWNoIG9wZXJhdGlvbnMgb24gPHR0PmlzdHJlYW1faXRlcmF0b3I8L3R0PiB0cmlnZ2VyIGlucHV0IG9wZXJhdGlvbnM/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjQuNS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pc3RyZWFtLml0ZXJhdG9yIj4gW2xpYi5pc3RyZWFtLml0ZXJhdG9yXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmRyZXcgS29lbmlnJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzAyIE1heSAyMDAwPC9wPgo8cD5JIGRvIG5vdCB0aGluayB0aGUgc3RhbmRhcmQgc3BlY2lmaWVzIHdoYXQgb3BlcmF0aW9uKHMpIG9uIGlzdHJlYW0KaXRlcmF0b3JzIHRyaWdnZXIgaW5wdXQgb3BlcmF0aW9ucy4gIFNvLCBmb3IgZXhhbXBsZTo8L3A+Cgo8cHJlPiAgICAgICAgaXN0cmVhbV9pdGVyYXRvciZsdDtpbnQmZ3Q7IGkoY2luKTsKCiAgICAgICAgaW50IG4gPSAqaSsrOwo8L3ByZT4KCjxwPkkgZG8gbm90IHRoaW5rIGl0IGlzIHNwZWNpZmllZCBob3cgbWFueSBpbnRlZ2VycyBoYXZlIGJlZW4gcmVhZApmcm9tIGNpbi4gIFRoZSBudW1iZXIgbXVzdCBiZSBhdCBsZWFzdCAxLCBvZiBjb3Vyc2UsIGJ1dCBjYW4gaXQgYmUgMj8KTW9yZT88L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBzdGFuZGFyZCBpcyBjbGVhciBhcyB3cml0dGVuOiB0aGUgc3RyZWFtIGlzIHJlYWQgZXZlcnkgdGltZQpvcGVyYXRvcisrIGlzIGNhbGxlZCwgYW5kIGl0IGlzIGFsc28gcmVhZCBlaXRoZXIgd2hlbiB0aGUgaXRlcmF0b3IgaXMKY29uc3RydWN0ZWQgb3Igd2hlbiBvcGVyYXRvciogaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZS4gIEluIHRoZQpleGFtcGxlIGFib3ZlLCBleGFjdGx5IHR3byBpbnRlZ2VycyBhcmUgcmVhZCBmcm9tIGNpbi48L3A+Cgo8cD5UaGVyZSBtYXkgYmUgYSBwcm9ibGVtIHdpdGggdGhlIGludGVyYWN0aW9uIGJldHdlZW4gaXN0cmVhbV9pdGVyYXRvcgphbmQgc29tZSBTVEwgYWxnb3JpdGhtcywgc3VjaCBhcyBmaW5kLiAgVGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgYWJvdXQKaG93IG1hbnkgdGltZXMgZmluZCBtYXkgaW52b2tlIG9wZXJhdG9yKysuPC9wPgo8aHI+CjxhIG5hbWU9IjI0NiI+PGgzPjI0Ni4mbmJzcDs8dHQ+YS5pbnNlcnQocCx0KTwvdHQ+IGlzIGluY29ycmVjdGx5IHNwZWNpZmllZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmFzc29jaWF0aXZlLnJlcW10cyI+IFtsaWIuYXNzb2NpYXRpdmUucmVxbXRzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEdXAiPkR1cDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJrIFJvZGdlcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTkgTWF5IDIwMDA8L3A+CjxwPkNsb3NlZCBpc3N1ZSAxOTIgcmFpc2VkIHNldmVyYWwgcHJvYmxlbXMgd2l0aCB0aGUgc3BlY2lmaWNhdGlvbiBvZgp0aGlzIGZ1bmN0aW9uLCBidXQgd2FzIHJlamVjdGVkIGFzIE5vdCBBIERlZmVjdCBiZWNhdXNlIGl0IHdhcyB0b28gYmlnCmEgY2hhbmdlIHdpdGggdW5hY2NlcHRhYmxlIGltcGFjdHMgb24gZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zLgpIb3dldmVyLCBpc3N1ZXMgcmVtYWluIHRoYXQgY291bGQgYmUgYWRkcmVzc2VkIHdpdGggYSBzbWFsbGVyIGNoYW5nZQphbmQgd2l0aCBsaXR0bGUgb3Igbm8gY29uc2VxdWVudCBpbXBhY3QuPC9wPgoKPG9sPgogICA8bGk+CjxwPiBUaGUgc3BlY2lmaWNhdGlvbiBpcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgb3JpZ2luYWwKICAgcHJvcG9zYWwgYW5kIHdpdGggc2V2ZXJhbCBpbXBsZW1lbnRhdGlvbnMuPC9wPgoKICAgPHA+VGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24gYnkgSGV3bGV0dCBQYWNrYXJkIG9ubHkgZXZlciBsb29rZWQKICAgaW1tZWRpYXRlbHkgPGk+YmVmb3JlPC9pPiBwLCBhbmQgSSBkbyBub3QgYmVsaWV2ZSB0aGVyZSB3YXMgYW55CiAgIGludGVudGlvbiB0byBzdGFuZGFyZGl6ZSBhbnl0aGluZyBvdGhlciB0aGFuIHRoaXMgYmVoYXZpb3IuCiAgIENvbnNlcXVlbnRseSwgY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgYnkgc2V2ZXJhbCBsZWFkaW5nCiAgIGltcGxlbWVudG9ycyBhbHNvIGxvb2sgaW1tZWRpYXRlbHkgYmVmb3JlIHAsIGFuZCB3aWxsIG9ubHkgaW5zZXJ0CiAgIGFmdGVyIHAgaW4gbG9nYXJpdGhtaWMgdGltZS4gIEkgYW0gb25seSBhd2FyZSBvZiBvbmUgaW1wbGVtZW50YXRpb24KICAgdGhhdCBkb2VzIGFjdHVhbGx5IGxvb2sgYWZ0ZXIgcCwgYW5kIGl0IGxvb2tzIGJlZm9yZSBwIGFzIHdlbGwuICBJdAogICBpcyB0aGVyZWZvcmUgZG91YnRmdWwgdGhhdCBleGlzdGluZyBjb2RlIHdvdWxkIGJlIHJlbHlpbmcgb24gdGhlCiAgIGJlaGF2aW9yIGRlZmluZWQgaW4gdGhlIHN0YW5kYXJkLCBhbmQgaXQgd291bGQgc2VlbSB0aGF0IGZpeGluZwogICB0aGlzIGRlZmVjdCBhcyBwcm9wb3NlZCBiZWxvdyB3b3VsZCBzdGFuZGFyZGl6ZSBleGlzdGluZwogICBwcmFjdGljZS48L3A+CjwvbGk+CgogICA8bGk+CjxwPgogICBUaGUgc3BlY2lmaWNhdGlvbiBpcyBpbmNvbnNpc3RlbnQgd2l0aCBpbnNlcnRpb24gZm9yIHNlcXVlbmNlCiAgIGNvbnRhaW5lcnMuPC9wPgoKICAgPHA+VGhpcyBpcyBkaWZmaWN1bHQgYW5kIGNvbmZ1c2luZyB0byB0ZWFjaCB0byBuZXdjb21lcnMuICBBbGwKICAgaW5zZXJ0IG9wZXJhdGlvbnMgdGhhdCBzcGVjaWZ5IGFuIGl0ZXJhdG9yIGFzIGFuIGluc2VydGlvbiBsb2NhdGlvbgogICBzaG91bGQgaGF2ZSBhIGNvbnNpc3RlbnQgbWVhbmluZyBmb3IgdGhlIGxvY2F0aW9uIHJlcHJlc2VudGVkIGJ5CiAgIHRoYXQgaXRlcmF0b3IuPC9wPgo8L2xpPgoKICAgPGxpPgo8cD4gQXMgc3BlY2lmaWVkLCB0aGVyZSBpcyBubyB3YXkgdG8gaGludCB0aGF0IHRoZSBpbnNlcnRpb24KICAgc2hvdWxkIG9jY3VyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbnRhaW5lciwgYW5kIHRoZSB3YXkgdG8gaGludAogICB0aGF0IGl0IHNob3VsZCBvY2N1ciBhdCB0aGUgZW5kIGlzIGxvbmcgd2luZGVkIGFuZCB1bm5hdHVyYWwuPC9wPgoKICAgPHA+Rm9yIGEgY29udGFpbmVyIGNvbnRhaW5pbmcgbiBlbGVtZW50cywgdGhlcmUgYXJlIG4rMSBwb3NzaWJsZQogICBpbnNlcnRpb24gbG9jYXRpb25zIGFuZCBuKzEgdmFsaWQgaXRlcmF0b3JzLiAgRm9yIHRoZXJlIHRvIGJlIGEKICAgb25lLXRvLW9uZSBtYXBwaW5nIGJldHdlZW4gaXRlcmF0b3JzIGFuZCBpbnNlcnRpb24gbG9jYXRpb25zLCB0aGUKICAgaXRlcmF0b3IgbXVzdCByZXByZXNlbnQgYW4gaW5zZXJ0aW9uIGxvY2F0aW9uIGltbWVkaWF0ZWx5IGJlZm9yZQogICB0aGUgaXRlcmF0b3IuPC9wPgo8L2xpPgoKICAgPGxpPgo8cD4gV2hlbiBhcHBlbmRpbmcgc29ydGVkIHJhbmdlcyB1c2luZyBpbnNlcnRfaXRlcmF0b3JzLAogICBpbnNlcnRpb25zIGFyZSBndWFyYW50ZWVkIHRvIGJlIHN1Yi1vcHRpbWFsLjwvcD4KCiAgIDxwPkluIHN1Y2ggYSBzaXR1YXRpb24sIHRoZSBvcHRpbXVtIGxvY2F0aW9uIGZvciBpbnNlcnRpb24gaXMKICAgYWx3YXlzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBlbGVtZW50IHByZXZpb3VzbHkgaW5zZXJ0ZWQuICBUaGUKICAgbWVjaGFuaWNzIG9mIHRoZSBpbnNlcnQgaXRlcmF0b3IgZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCB0cnkgYW5kCiAgIGluc2VydCBhZnRlciB0aGUgZWxlbWVudCBhZnRlciB0aGF0LCB3aGljaCB3aWxsIG5ldmVyIGJlIGNvcnJlY3QuCiAgIEhvd2V2ZXIsIGlmIHRoZSBjb250YWluZXIgZmlyc3QgdHJpZWQgdG8gaW5zZXJ0IGJlZm9yZSB0aGUgaGludCwKICAgYWxsIGluc2VydGlvbnMgd291bGQgYmUgcGVyZm9ybWVkIGluIGFtb3J0aXplZCBjb25zdGFudAogICB0aW1lLjwvcD4KPC9saT4KPC9vbD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMy4xLjIgW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdIHBhcmFncmFwaCA3LCB0YWJsZSA2OSwgbWFrZQp0aGUgZm9sbG93aW5nIGNoYW5nZXMgaW4gdGhlIHJvdyBmb3IgYS5pbnNlcnQocCx0KTo8L3A+Cgo8cD48aT5hc3NlcnRpb24vbm90ZSBwcmUvcG9zdCBjb25kaXRpb246PC9pPgo8YnI+Q2hhbmdlIHRoZSBsYXN0IHNlbnRlbmNlIGZyb208L3A+CiAgICAgPGJsb2NrcXVvdGU+CiAgICAgIml0ZXJhdG9yIHAgaXMgYSBoaW50IHBvaW50aW5nIHRvIHdoZXJlIHRoZSBpbnNlcnQgc2hvdWxkCiAgICAgc3RhcnQgdG8gc2VhcmNoLiIKICAgICA8L2Jsb2NrcXVvdGU+CjxwPnRvPC9wPgogICAgIDxibG9ja3F1b3RlPgogICAgICJpdGVyYXRvciBwIGlzIGEgaGludCBpbmRpY2F0aW5nIHRoYXQgaW1tZWRpYXRlbHkgYmVmb3JlIHAKICAgICBtYXkgYmUgYSBjb3JyZWN0IGxvY2F0aW9uIHdoZXJlIHRoZSBpbnNlcnRpb24gY291bGQgb2NjdXIuIgogICAgIDwvYmxvY2txdW90ZT4KCjxwPjxpPmNvbXBsZXhpdHk6PC9pPjxicj4KQ2hhbmdlIHRoZSB3b3JkcyAicmlnaHQgYWZ0ZXIiIHRvICJpbW1lZGlhdGVseSBiZWZvcmUiLjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkR1cGxpY2F0ZTsgc2VlIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzIzMyI+MjMzPC9hPi48L3A+Cjxocj4KPGEgbmFtZT0iMjQ5Ij48aDM+MjQ5LiZuYnNwO1JldHVybiBUeXBlIG9mIDx0dD5hdXRvX3B0cjo6b3BlcmF0b3I9PC90dD4KPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjAuNC41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5tZXRhLnVuYXJ5Ij4gW2xpYi5tZXRhLnVuYXJ5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKb3NlcGggR290dG1hbiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszMCBKdW4gMjAwMDwvcD4KPHA+QWNjb3JkaW5nIHRvIHNlY3Rpb24gMjAuNC41LCB0aGUgZnVuY3Rpb24KPHR0PmF1dG9fcHRyOjpvcGVyYXRvcj0oKTwvdHQ+IHJldHVybnMgYSByZWZlcmVuY2UgdG8gYW4gYXV0b19wdHIuClRoZSByZWFzb24gdGhhdCA8dHQ+b3BlcmF0b3I9KCk8L3R0PiB1c3VhbGx5IHJldHVybnMgYSByZWZlcmVuY2UgaXMgdG8KZmFjaWxpdGF0ZSBjb2RlIGxpa2U8L3A+Cgo8cHJlPiAgICBpbnQgeCx5LHo7CiAgICB4ID0geSA9IHogPSAxOwo8L3ByZT4KCjxwPkhvd2V2ZXIsIGdpdmVuIGFuYWxvZ291cyBjb2RlIGZvciA8dHQ+YXV0b19wdHI8L3R0PnMsPC9wPgo8cHJlPiAgICBhdXRvX3B0ciZsdDtpbnQmZ3Q7IHgsIHksIHo7CiAgICB6LnJlc2V0KG5ldyBpbnQoMSkpOwogICAgeCA9IHkgPSB6Owo8L3ByZT4KCjxwPnRoZSByZXN1bHQgd291bGQgYmUgdGhhdCA8dHQ+ejwvdHQ+IGFuZCA8dHQ+eTwvdHQ+IHdvdWxkIGJvdGggYmUgc2V0IHRvIApOVUxMLCBpbnN0ZWFkIG9mIGFsbCB0aGUgPHR0PmF1dG9fcHRyPC90dD5zIGJlaW5nIHNldCB0byB0aGUgc2FtZSB2YWx1ZS4gClRoaXMgbWFrZXMgc3VjaCBjYXNjYWRpbmcgYXNzaWdubWVudHMgdXNlbGVzcyBhbmQgY291bnRlcmludHVpdGl2ZSBmb3IgCjx0dD5hdXRvX3B0cjwvdHQ+cy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDx0dD5hdXRvX3B0cjo6b3BlcmF0b3I9KCk8L3R0PiB0byByZXR1cm4gPHR0PnZvaWQ8L3R0PiBpbnN0ZWFkCm9mIGFuIDx0dD5hdXRvX3B0cjwvdHQ+IHJlZmVyZW5jZS48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgcmV0dXJuIHZhbHVlIGhhcyB1c2VzIG90aGVyIHRoYW4gY2FzY2FkZWQgYXNzaWdubWVudHM6IGEgdXNlciBjYW4KY2FsbCBhbiBhdXRvX3B0ciBtZW1iZXIgZnVuY3Rpb24sIHBhc3MgdGhlIGF1dG9fcHRyIHRvIGEKZnVuY3Rpb24sIGV0Yy4gIFJlbW92aW5nIHRoZSByZXR1cm4gdmFsdWUgY291bGQgYnJlYWsgd29ya2luZyB1c2VyCmNvZGUuPC9wPgo8aHI+CjxhIG5hbWU9IjI1NyI+PGgzPjI1Ny4mbmJzcDtTVEwgZnVuY3Rpb25hbCBvYmplY3QgYW5kIGl0ZXJhdG9yIGluaGVyaXRhbmNlLjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIudHVwbGUudHVwbGUiPiBbbGliLnR1cGxlLnR1cGxlXTwvYT4sIDI0LjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaXRlcmF0b3IuYmFzaWMiPiBbbGliLml0ZXJhdG9yLmJhc2ljXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtSb2JlcnQgRGljayAmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTcgQXVnIDIwMDA8L3A+CjxwPgpBY2NvcmRpbmcgdG8gdGhlIE5vdmVtYmVyIDE5OTcgRHJhZnQgU3RhbmRhcmQsIHRoZSByZXN1bHRzIG9mIGRlbGV0aW5nIGFuCm9iamVjdCBvZiBhIGRlcml2ZWQgY2xhc3MgdGhyb3VnaCBhIHBvaW50ZXIgdG8gYW4gb2JqZWN0IG9mIGl0cyBiYXNlIGNsYXNzIGFyZQp1bmRlZmluZWQgaWYgdGhlIGJhc2UgY2xhc3MgaGFzIGEgbm9uLXZpcnR1YWwgZGVzdHJ1Y3Rvci4gIFRoZXJlZm9yZSwgaXQgaXMKcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIHRvIHB1YmxpY2x5IGluaGVyaXQgZnJvbSBzdWNoIGJhc2UgY2xhc3Nlcy4KPC9wPgoKPHA+RGVmZWN0Ogo8YnI+ClRoZSBTVEwgZGVzaWduIGVuY291cmFnZXMgdXNlcnMgdG8gcHVibGljbHkgaW5oZXJpdCBmcm9tIGEgbnVtYmVyIG9mIGNsYXNzZXMKd2hpY2ggZG8gbm90aGluZyBidXQgc3BlY2lmeSBpbnRlcmZhY2VzLCBhbmQgd2hpY2ggY29udGFpbiBub24tdmlydHVhbApkZXN0cnVjdG9ycy4KPC9wPgoKPHA+QXR0cmlidXRpb246Cjxicj4KV2lsIEV2ZXJzIGFuZCBXaWxsaWFtIEUuIEtlbXBmIHN1Z2dlc3RlZCB0aGlzIG1vZGlmaWNhdGlvbiBmb3IgZnVuY3Rpb25hbApvYmplY3RzLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CldoZW4gYSBiYXNlIGNsYXNzIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGlzIHVzZWZ1bCBvbmx5IGFzIGFuIGludGVyZmFjZQpzcGVjaWZpZXIsIGkuZS4sIHdoZW4gYW4gb2JqZWN0IG9mIHRoZSBjbGFzcyB3aWxsIG5ldmVyIGJlIGRpcmVjdGx5Cmluc3RhbnRpYXRlZCwgc3BlY2lmeSB0aGF0IHRoZSBjbGFzcyBjb250YWlucyBhIHByb3RlY3RlZCBkZXN0cnVjdG9yLiAgVGhpcwp3aWxsIHByZXZlbnQgZGVsZXRpb24gdGhyb3VnaCBhIHBvaW50ZXIgdG8gdGhlIGJhc2UgY2xhc3Mgd2l0aG91dCBwZXJmb3JtYW5jZSwKb3Igc3BhY2UgcGVuYWx0aWVzIChvbiBhbnkgaW1wbGVtZW50YXRpb24gSSdtIGF3YXJlIG9mKS4KPC9wPgoKPHA+CkFzIGFuIGV4YW1wbGUsIHJlcGxhY2UuLi4KPC9wPgoKPHByZT4gICAgdGVtcGxhdGUgJmx0O2NsYXNzIEFyZywgY2xhc3MgUmVzdWx0Jmd0OwogICAgc3RydWN0IHVuYXJ5X2Z1bmN0aW9uIHsKICAgICAgICAgICAgdHlwZWRlZiBBcmcgICAgYXJndW1lbnRfdHlwZTsKICAgICAgICAgICAgdHlwZWRlZiBSZXN1bHQgcmVzdWx0X3R5cGU7CiAgICB9Owo8L3ByZT4KCjxwPgouLi4gd2l0aC4uLgo8L3A+Cgo8cHJlPiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgQXJnLCBjbGFzcyBSZXN1bHQmZ3Q7CiAgICBzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogICAgICAgICAgICB0eXBlZGVmIEFyZyAgICBhcmd1bWVudF90eXBlOwogICAgICAgICAgICB0eXBlZGVmIFJlc3VsdCByZXN1bHRfdHlwZTsKICAgIHByb3RlY3RlZDoKICAgICAgICAgICAgfnVuYXJ5X2Z1bmN0aW9uKCkge30KICAgIH07CjwvcHJlPgoKPHA+CkFmZmVjdGVkIGRlZmluaXRpb25zOgo8YnI+CiAgJm5ic3A7MjAuMy4xIFtsaWIuZnVuY3Rpb24ub2JqZWN0c10gLS0gdW5hcnlfZnVuY3Rpb24sIGJpbmFyeV9mdW5jdGlvbgogIDxicj4KICAmbmJzcDsyNC4zLjIgW2xpYi5pdGVyYXRvci5iYXNpY10gLS0gaXRlcmF0b3IKPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+ClRoZSBzdGFuZGFyZCBpcyBjbGVhciBhcyB3cml0dGVuOyB0aGlzIGlzIGEgcmVxdWVzdCBmb3IgY2hhbmdlLCBub3QgYQpkZWZlY3QgaW4gdGhlIHN0cmljdCBzZW5zZS4gIFRoZSBMV0cgaGFkIHNldmVyYWwgZGlmZmVyZW50IG9iamVjdGlvbnMKdG8gdGhlIHByb3Bvc2VkIGNoYW5nZS4gIE9uZSBpcyB0aGF0IGl0IHdvdWxkIHByZXZlbnQgdXNlcnMgZnJvbQpjcmVhdGluZyBvYmplY3RzIG9mIHR5cGUgPHR0PnVuYXJ5X2Z1bmN0aW9uPC90dD4gYW5kCjx0dD5iaW5hcnlfZnVuY3Rpb248L3R0Pi4gIERvaW5nIHNvIGNhbiBzb21ldGltZXMgYmUgbGVnaXRpbWF0ZSwgaWYgdXNlcnMKd2FudCB0byBwYXNzIHRlbXBvcmFyaWVzIGFzIHRyYWl0cyBvciB0YWcgdHlwZXMgaW4gZ2VuZXJpYyBjb2RlLgo8L3A+Cjxocj4KPGEgbmFtZT0iMjY3Ij48aDM+MjY3LiZuYnNwO2ludGVyYWN0aW9uIG9mIHN0cnN0cmVhbWJ1Zjo6b3ZlcmZsb3coKSBhbmQgc2Vla29mZigpPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7RC43LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2Z1dHVyZS5odG1sI2RlcHIuc3Ryc3RyZWFtYnVmLnZpcnR1YWxzIj4gW2RlcHIuc3Ryc3RyZWFtYnVmLnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NSBPY3QgMjAwMDwvcD4KPHA+Ckl0IGFwcGVhcnMgdGhhdCB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlIHN0cnN0cmVhbWJ1ZiBtZW1iZXJzIG92ZXJmbG93KCkKYW5kIHNlZWtvZmYoKSBjYW4gbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3IgaW4gY2FzZXMgd2hlcmUgZGVmaW5lZApiZWhhdmlvciBjb3VsZCByZWFzb25hYmx5IGJlIGV4cGVjdGVkLiBUaGUgZm9sbG93aW5nIHByb2dyYW0KZGVtb25zdHJhdGVzIHRoaXMgYmVoYXZpb3I6CjwvcD4KCjxwcmU+ICAgICNpbmNsdWRlICZsdDtzdHJzdHJlYW0mZ3Q7CgogICAgaW50IG1haW4gKCkKICAgIHsKICAgICAgICAgc3RkOjpzdHJzdHJlYW1idWYgc2I7CiAgICAgICAgIHNiLnNwdXRjICgnYycpOwoKICAgICAgICAgc2IucHVic2Vla29mZiAoLTEsIHN0ZDo6aW9zOjplbmQsIHN0ZDo6aW9zOjppbik7CiAgICAgICAgIHJldHVybiAhKCdjJyA9PSBzYi5zZ2V0YyAoKSk7CiAgICB9CjwvcHJlPgoKPHA+CkQuNy4xLjEsIHAxIGluaXRpYWxpemVzIHN0cnN0cmVhbWJ1ZiB3aXRoIGEgY2FsbCB0byBiYXNpY19zdHJlYW1idWYmbHQ7Jmd0OygpLAp3aGljaCBpbiB0dXJuIHNldHMgYWxsIHBvaW50ZXJzIHRvIDAgaW4gMjcuNS4yLjEsIHAxLgo8L3A+CiAKPHA+CjI3LjUuMi4yLjUsIHAxIHNheXMgdGhhdCBiYXNpY19zdHJlYW1idWYmbHQ7Jmd0Ozo6c3B1dGMoYykgY2FsbHMKb3ZlcmZsb3codHJhaXRzOjp0b19pbnRfdHlwZShjKSkgaWYgYSB3cml0ZSBwb3NpdGlvbiBpc24ndCBhdmFpbGFibGUgKGl0Cmlzbid0IGR1ZSB0byB0aGUgYWJvdmUpLgo8L3A+Cgo8cD4KRC43LjEuMywgcDMgc2F5cyB0aGF0IHN0cnN0cmVhbWJ1Zjo6b3ZlcmZsb3cob2ZmLCAuLi4sIGlvczo6aW4pIG1ha2VzIGF0CmxlYXN0IG9uZSB3cml0ZSBwb3NpdGlvbiBhdmFpbGFibGUgKGkuZS4sIGl0IGFsbG93cyB0aGUgZnVuY3Rpb24gdG8gbWFrZQphbnkgcG9zaXRpdmUgbnVtYmVyIG9mIHdyaXRlIHBvc2l0aW9ucyBhdmFpbGFibGUpLgo8L3A+Cgo8cD4KRC43LjEuMywgcDEzIGNvbXB1dGVzIG5ld29mZiA9IHNlZWtoaWdoIC0gZWJhY2soKS4gSW4gRC43LjEsIHA0IHdlIHNlZQpzZWVraGlnaCA9IGVwcHRyKCkgPyBlcHB0cigpIDogZWdwdHIoKSwgb3Igc2Vla2hpZ2ggPSBlcHB0cigpIGluIHRoaXMKY2FzZS4gbmV3b2ZmIGlzIHRoZW4gZXBwdHIoKSAtIGViYWNrKCkuCjwvcD4KCjxwPgpELjcuMS40LCBwMTQgc2V0cyBncHRyKCkgc28gdGhhdCBncHRyKCkgPT0gZWJhY2soKSArIG5ld29mZiArIG9mZiwgb3IKZ3B0cigpID09IGVwcHRyKCkgKyBvZmYgaG9sZHMuCjwvcD4KCjxwPgpJZiBzdHJzdHJlYW1idWY6Om92ZXJmbG93KCkgbWFkZSBleGFjdGx5IG9uZSB3cml0ZSBwb3NpdGlvbiBhdmFpbGFibGUKdGhlbiBncHRyKCkgd2lsbCBiZSBzZXQgdG8ganVzdCBiZWZvcmUgZXBwdHIoKSwgYW5kIHRoZSBwcm9ncmFtIHdpbGwKcmV0dXJuIDAuIEJ1ZiBpZiB0aGUgZnVuY3Rpb24gbWFkZSBtb3JlIHRoYW4gb25lIHdyaXRlIHBvc2l0aW9uCmF2YWlsYWJsZSwgZXBwdHIoKSBhbmQgZ3B0cigpIHdpbGwgYm90aCBwb2ludCBwYXN0IHBwdHIoKSBhbmQgdGhlCmJlaGF2aW9yIG9mIHRoZSBwcm9ncmFtIGlzIHVuZGVmaW5lZC4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CgoKICAgPHA+Q2hhbmdlIHRoZSBsYXN0IHNlbnRlbmNlIG9mIEQuNy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvZnV0dXJlLmh0bWwjZGVwci5zdHJzdHJlYW1idWYiPiBbZGVwci5zdHJzdHJlYW1idWZdPC9hPiBwYXJhZ3JhcGggNCBmcm9tPC9wPgoKICAgICAgPGJsb2NrcXVvdGU+CiAgICAgIE90aGVyd2lzZSwgc2Vla2xvdyBlcXVhbHMgZ2JlZyBhbmQgc2Vla2hpZ2ggaXMgZWl0aGVyIHBlbmQsIGlmCiAgICAgIHBlbmQgaXMgbm90IGEgbnVsbCBwb2ludGVyLCBvciBnZW5kLgogICAgICA8L2Jsb2NrcXVvdGU+CgogICA8cD50byBiZWNvbWU8L3A+CgogICAgICA8YmxvY2txdW90ZT4KICAgICAgT3RoZXJ3aXNlLCBzZWVrbG93IGVxdWFscyBnYmVnIGFuZCBzZWVraGlnaCBpcyBlaXRoZXIgZ2VuZCBpZgogICAgICAwID09IHBwdHIoKSwgb3IgcGJhc2UoKSArIG1heCB3aGVyZSBtYXggaXMgdGhlIG1heGltdW0gdmFsdWUgb2YKICAgICAgcHB0cigpIC0gcGJhc2UoKSBldmVyIHJlYWNoZWQgZm9yIHRoaXMgc3RyZWFtLgogICAgICA8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bCiAgcHJlLUNvcGVuaGFnZW46IERpZXRtYXIgcHJvdmlkZWQgd29yZGluZyBmb3IgcHJvcG9zZWQgcmVzb2x1dGlvbi4KXTwvaT48L3A+Cgo8cD48aT5bCiAgcG9zdC1Db3BlbmhhZ2VuOiBGaXhlZCBhIHR5cG86IHByb3Bvc2VkIHJlc29sdXRpb24gc2FpZCB0byBmaXgKICA0LjcuMSwgbm90IEQuNy4xLgpdPC9pPjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGlzIGlzIHJlbGF0ZWQgdG8gaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjUiPjY1PC9hPjogaXQncyBub3QgY2xlYXIgd2hhdCBpdAptZWFucyB0byBzZWVrIGJleW9uZCB0aGUgY3VycmVudCBhcmVhLiAgV2l0aG91dCByZXNvbHZpbmcgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjUiPjY1PC9hPiB3ZSBjYW4ndCByZXNvbHZlIHRoaXMuICBBcyB3aXRoIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzY1Ij42NTwvYT4sIAp0aGUgbGlicmFyeSB3b3JraW5nIGdyb3VwIGRvZXMgbm90IHdpc2ggdG8gaW52ZXN0IHRpbWUgbmFpbGluZyBkb3duCmNvcm5lciBjYXNlcyBpbiBhIGRlcHJlY2F0ZWQgZmVhdHVyZS48L3A+Cjxocj4KPGEgbmFtZT0iMjY5Ij48aDM+MjY5LiZuYnNwO2NzdGRhcmcgYW5kIHVubmFtZWQgcGFyYW1ldGVyczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE4LjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi5zdXBwb3J0LmV4Y2VwdGlvbiI+IFtsaWIuc3VwcG9ydC5leGNlcHRpb25dPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0ouIFN0ZXBoZW4gQWRhbWN6eWsmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTAgT2N0IDIwMDA8L3A+CjxwPgpPbmUgb2Ygb3VyIGN1c3RvbWVycyBhc2tzIHdoZXRoZXIgdGhpcyBpcyB2YWxpZCBDKys6CjwvcD4KCjxwcmU+ICAgI2luY2x1ZGUgJmx0O2NzdGRhcmcmZ3Q7CgogICB2b2lkIGJhcihjb25zdCBjaGFyICosIHZhX2xpc3QpOwoKICAgdm9pZAogICBmb28oY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqLCAuLi4pCiAgIHsKICAgICB2YV9saXN0IGFwOwogICAgIHZhX3N0YXJ0KGFwLCBmaWxlKTsKICAgICBiYXIoZmlsZSwgYXApOwogICAgIHZhX2VuZChhcCk7CiAgIH0KPC9wcmU+Cgo8cD4KVGhlIGlzc3VlIGJlaW5nIHdoZXRoZXIgaXQgaXMgdmFsaWQgdG8gdXNlIGNzdGRhcmcgd2hlbiB0aGUgZmluYWwKcGFyYW1ldGVyIGJlZm9yZSB0aGUgIi4uLiIgaXMgdW5uYW1lZC4gIGNzdGRhcmcgaXMsIGFzIGZhcgphcyBJIGNhbiB0ZWxsLCBpbmhlcml0ZWQgdmVyYmF0aW0gZnJvbSB0aGUgQyBzdGFuZGFyZC4gYW5kIHRoZQpkZWZpbml0aW9uIHRoZXJlICg3LjguMS4xIGluIHRoZSBJU08gQzg5IHN0YW5kYXJkKSByZWZlcnMgdG8gInRoZQppZGVudGlmaWVyIG9mIHRoZSByaWdodG1vc3QgcGFyYW1ldGVyIi4gIFdoYXQgaGFwcGVucyB3aGVuIHRoZXJlCmlzIG5vIHN1Y2ggaWRlbnRpZmllcj8KPC9wPgoKPHA+Ck15IHBlcnNvbmFsIG9waW5pb24gaXMgdGhhdCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLCBidXQgc29tZSB0d2VhawptaWdodCBiZSByZXF1aXJlZCBpbiB0aGUgQysrIHN0YW5kYXJkLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpOb3QgYSBkZWZlY3QsIHRoZSBDIGFuZCBDKysgc3RhbmRhcmRzIGFyZSBjbGVhci4gIEl0IGlzIGltcG9zc2libGUgdG8KdXNlIHZhcmFyZ3MgaWYgdGhlIHBhcmFtZXRlciBpbW1lZGlhdGVseSBiZWZvcmUgIi4uLiIgaGFzIG5vCm5hbWUsIGJlY2F1c2UgdGhhdCBpcyB0aGUgcGFyYW1ldGVyIHRoYXQgbXVzdCBiZSBwYXNzZWQgdG8gdmFfc3RhcnQuClRoZSBleGFtcGxlIGdpdmVuIGFib3ZlIGlzIGJyb2tlbiwgYmVjYXVzZSB2YV9zdGFydCBpcyBiZWluZyBwYXNzZWQKdGhlIHdyb25nIHBhcmFtZXRlci4KPC9wPgoKPHA+ClRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIGV4dGVuZGluZyB2YXJhcmdzIHRvIHByb3ZpZGUgYWRkaXRpb25hbApmdW5jdGlvbmFsaXR5IGJleW9uZCB3aGF0J3MgY3VycmVudGx5IHRoZXJlLiAgRm9yIHJlYXNvbnMgb2YgQy9DKysKY29tcGF0aWJpbGl0eSwgaXQgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgbm90IHRvIG1ha2UgZ3JhdHVpdG91cwpjaGFuZ2VzIGluIHRoaXMgcGFydCBvZiB0aGUgQysrIHN0YW5kYXJkLiAgVGhlIEMgY29tbWl0dGVlIGhhcyBhbHJlYWR5CmJlZW4gcmVxdWVzdGVkIG5vdCB0byB0b3VjaCB0aGlzIHBhcnQgb2YgdGhlIEMgc3RhbmRhcmQgdW5sZXNzCm5lY2Vzc2FyeS4KPC9wPgo8aHI+CjxhIG5hbWU9IjI3NyI+PGgzPjI3Ny4mbmJzcDtOb3JtYXRpdmUgZW5jb3VyYWdlbWVudCBpbiBhbGxvY2F0b3IgcmVxdWlyZW1lbnRzIHVuY2xlYXI8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMC4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmRlZmF1bHQuY29uLnJlcSI+IFtsaWIuZGVmYXVsdC5jb24ucmVxXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MDcgTm92IDIwMDA8L3A+CjxwPgpJbiAyMC4xLjUsIHBhcmFncmFwaCA1LCB0aGUgc3RhbmRhcmQgc2F5cyB0aGF0ICJJbXBsZW1lbnRvcnMgYXJlCmVuY291cmFnZWQgdG8gc3VwcGx5IGxpYnJhcmllcyB0aGF0IGNhbiBhY2NlcHQgYWxsb2NhdG9ycyB0aGF0CmVuY2Fwc3VsYXRlIG1vcmUgZ2VuZXJhbCBtZW1vcnkgbW9kZWxzIGFuZCB0aGF0IHN1cHBvcnQgbm9uLWVxdWFsCmluc3RhbmNlcy4iIFRoaXMgaXMgaW50ZW5kZWQgYXMgbm9ybWF0aXZlIGVuY291cmFnZW1lbnQgdG8Kc3RhbmRhcmQgbGlicmFyeSBpbXBsZW1lbnRvcnMuICBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0byBpbnRlcnByZXQKdGhpcyBzZW50ZW5jZSBhcyBhcHBseWluZyB0byBub25zdGFuZGFyZCB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gMjAuMS41LCBwYXJhZ3JhcGggNSwgY2hhbmdlICJJbXBsZW1lbnRvcnMiIHRvCiJJbXBsZW1lbnRvcnMgb2YgdGhlIGxpYnJhcnkgZGVzY3JpYmVkIGluIHRoaXMgSW50ZXJuYXRpb25hbApTdGFuZGFyZCIuCjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgYmVsaWV2ZXMgdGhlIG5vcm1hdGl2ZSBlbmNvdXJhZ2VtZW50IGlzIGFscmVhZHkKc3VmZmljaWVudGx5IGNsZWFyLCBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gaW1wb3J0YW50IGNvbnNlcXVlbmNlcwpldmVuIGlmIGl0IGlzIG1pc3VuZGVyc3Rvb2QuPC9wPgo8aHI+CjxhIG5hbWU9IjI3OSI+PGgzPjI3OS4mbmJzcDtjb25zdCBhbmQgbm9uLWNvbnN0IGl0ZXJhdG9ycyBzaG91bGQgaGF2ZSBlcXVpdmFsZW50IHR5cGVkZWZzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMiPiBbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1N0ZXZlIENsZWFyeSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNyBOb3YgMjAwMDwvcD4KCjxwPgpUaGlzIGNhbWUgZnJvbSBhbiBlbWFpbCBmcm9tIFN0ZXZlIENsZWFyeSB0byBGZXJndXMgaW4gcmVmZXJlbmNlIHRvCmlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNzkiPjE3OTwvYT4uIFRoZSBsaWJyYXJ5IHdvcmtpbmcgZ3JvdXAgYnJpZWZseSBkaXNjdXNzZWQKdGhpcyBpbiBUb3JvbnRvIGFuZCBiZWxpZXZlcyBpdCBzaG91bGQgYmUgYSBzZXBhcmF0ZSBpc3N1ZS4KPC9wPgoKPHA+ClN0ZXZlIHNhaWQ6ICJXZSBtYXkgd2FudCB0byBzdGF0ZSB0aGF0IHRoZSBjb25zdC9ub24tY29uc3QgaXRlcmF0b3JzIG11c3QgaGF2ZQp0aGUgc2FtZSBkaWZmZXJlbmNlIHR5cGUsIHNpemVfdHlwZSwgYW5kIGNhdGVnb3J5LiIKPC9wPgoKPHA+CihDb21tZW50IGZyb20gSnVkeSkKSSdtIG5vdCBzdXJlIGlmIHRoZSBhYm92ZSBzZW50ZW5jZSBzaG91bGQgYmUgdHJ1ZSBmb3IgYWxsCmNvbnN0IGFuZCBub24tY29uc3QgaXRlcmF0b3JzIGluIGEgcGFydGljdWxhciBjb250YWluZXIsIG9yIGlmIGl0IG1lYW5zIAp0aGUgY29udGFpbmVyJ3MgaXRlcmF0b3IgY2FuJ3QgYmUgY29tcGFyZWQgd2l0aCB0aGUgY29udGFpbmVyJ3MKY29uc3RfaXRlcmF0b3IgdW5sZXNzIHRoZSBhYm92ZSBpdCB0cnVlLiBJIHN1c3BlY3QgdGhlIGZvcm1lci4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJbiA8Yj5TZWN0aW9uOjwvYj4gMjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMiPiBbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdPC9hPiwKdGFibGUgNjUsIGluIHRoZSBhc3NlcnRpb24vbm90ZSBwcmUvcG9zdCBjb25kaXRpb24gZm9yIFg6OmNvbnN0X2l0ZXJhdG9yLAphZGQgdGhlIGZvbGxvd2luZzoKPC9wPgoKPGJsb2NrcXVvdGU+CjxwPgp0eXBlaWQoWDo6Y29uc3RfaXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSkgPT0gdHlwZWlkKFg6Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUpCjwvcD4KCjxwPgp0eXBlaWQoWDo6Y29uc3RfaXRlcmF0b3I6OnNpemVfdHlwZSkgPT0gdHlwZWlkKFg6Oml0ZXJhdG9yOjpzaXplX3R5cGUpCjwvcD4KCjxwPgp0eXBlaWQoWDo6Y29uc3RfaXRlcmF0b3I6OmNhdGVnb3J5KSA9PSB0eXBlaWQoWDo6aXRlcmF0b3I6OmNhdGVnb3J5KQo8L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkdvaW5nIHRocm91Z2ggdGhlIHR5cGVzIG9uZSBieSBvbmU6IEl0ZXJhdG9ycyBkb24ndCBoYXZlIGEKPHR0PnNpemVfdHlwZTwvdHQ+LiAgV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGRpZmZlcmVuY2UgdHlwZXMgYXJlCmlkZW50aWNhbCwgYmVjYXVzZSB0aGUgY29udGFpbmVyIHJlcXVpcmVtZW50cyBhbHJlYWR5IHNheSB0aGF0IHRoZQpkaWZmZXJlbmNlIHR5cGVzIG9mIGJvdGggWDo6aXRlcmF0b3IgYW5kIFg6OmNvbnN0X2l0ZXJhdG9yIGFyZSBib3RoClg6OmRpZmZlcmVuY2VfdHlwZS4gIFRoZSBzdGFuZGFyZCBkb2VzIG5vdCByZXF1aXJlIHRoYXQgWDo6aXRlcmF0b3IKYW5kIFg6OmNvbnN0X2l0ZXJhdG9yIGhhdmUgdGhlIHNhbWUgaXRlcmF0b3IgY2F0ZWdvcnksIGJ1dCB0aGUgTFdHCmRvZXMgbm90IHNlZSB0aGlzIGFzIGEgZGVmZWN0OiBpdCdzIHBvc3NpYmxlIHRvIGltYWdpbmUgY2FzZXMgaW4gd2hpY2gKaXQgd291bGQgYmUgdXNlZnVsIGZvciB0aGUgY2F0ZWdvcmllcyB0byBiZSBkaWZmZXJlbnQuPC9wPgoKPHA+SXQgbWF5IGJlIGRlc2lyYWJsZSB0byByZXF1aXJlIFg6Oml0ZXJhdG9yIGFuZCBYOjpjb25zdF9pdGVyYXRvciB0bwpoYXZlIHRoZSBzYW1lIHZhbHVlIHR5cGUsIGJ1dCB0aGF0IGlzIGEgbmV3IGlzc3VlLiAoSXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMyMiI+MzIyPC9hPi4pPC9wPgoKPGhyPgo8YSBuYW1lPSIyODciPjxoMz4yODcuJm5ic3A7Y29uZmxpY3RpbmcgaW9zX2Jhc2UgZm10ZmxhZ3M8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy40LjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuZm10ZmxhZ3Muc3RhdGUiPiBbbGliLmZtdGZsYWdzLnN0YXRlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKdWR5IFdhcmQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MzAgRGVjIDIwMDA8L3A+CjxwPgpUaGUgRWZmZWN0cyBjbGF1c2UgZm9yIGlvc19iYXNlOjpzZXRmKGZtdGZsYWdzIGZtdGZsKSBzYXlzCiJTZXRzIGZtdGZsIGluIGZsYWdzKCkiLiAgV2hhdCBoYXBwZW5zIGlmIHRoZSB1c2VyIGZpcnN0IGNhbGxzCmlvc19iYXNlOjpzY2llbnRpZmljIGFuZCB0aGVuIGNhbGxzIGlvc19iYXNlOjpmaXhlZCBvciB2aWNlLXZlcnNhPwpUaGlzIGlzIGFuIGlzc3VlIGZvciBhbGwgb2YgdGhlIGNvbmZsaWN0aW5nIGZsYWdzLCBpLmUuIGlvc19iYXNlOjpsZWZ0CmFuZCBpb3NfYmFzZTo6cmlnaHQgb3IgaW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6OmhleCBhbmQgaW9zX2Jhc2U6Om9jdC4KPC9wPgoKPHA+Ckkgc2VlIHRocmVlIHBvc3NpYmxlIHNvbHV0aW9uczogCjwvcD4KCjxvbD4KPGxpPlNldCBpb3NfYmFzZTo6ZmFpbGJpdCB3aGVuZXZlciB0aGUgdXNlciBzcGVjaWZpZXMgYSBjb25mbGljdGluZwpmbGFnIHdpdGggb25lIHByZXZpb3VzbHkgZXhwbGljaXRseSBzZXQuIElmIHRoZSBjb25zdHJ1Y3RvciBpcwpzdXBwb3NlZCB0byBzZXQgaW9zX2Jhc2U6OmRlYyAoc2VlIGRpc2N1c3Npb24gYmVsb3cpLCB0aGVuCnRoZSB1c2VyIHNldHRpbmcgaGV4IG9yIG9jdCBmb3JtYXQgYWZ0ZXIgY29uc3RydWN0aW9uIHdpbGwgbm90CnNldCBmYWlsYml0LiA8L2xpPgo8bGk+VGhlIGxhc3QgY2FsbCB0byBzZXRmICJ3aW5zIiwgaS5lLiBpdCBjbGVhcnMgYW55IGNvbmZsaWN0aW5nCnByZXZpb3VzIHNldHRpbmcuPC9saT4KPGxpPkFsbCB0aGUgZmxhZ3MgdGhhdCB0aGUgdXNlciBzcGVjaWZpZXMgYXJlIHNldCwgYnV0IHdoZW4gYWN0dWFsbHkgCmludGVycHJldGluZyB0aGVtLCBmaXhlZCBhbHdheXMgb3ZlcnJpZGUgc2NpZW50aWZpYywgcmlnaHQgYWx3YXlzIApvdmVycmlkZXMgbGVmdCwgZGVjIG92ZXJyaWRlcyBoZXggd2hpY2ggb3ZlcnJpZGVzIG9jdC48L2xpPgo8L29sPgoKPHA+Ck1vc3QgZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zIHRoYXQgSSB0cmllZCBzZWVtIHRvIGNvbmZvcm0gdG8gcmVzb2x1dGlvbiAjMywKZXhjZXB0IHRoYXQgd2hlbiB1c2luZyB0aGUgaW9tYW5pcCBtYW5pcHVsYXRvciBoZXggb3Igb2N0IHRoZW4gdGhhdCBhbHdheXMgCm92ZXJyaWRlcyBkZWMsIGJ1dCBjYWxsaW5nIHNldGYoaW9zX2Jhc2U6OmhleCkgZG9lc24ndC4gCjwvcD4KCjxwPgpUaGVyZSBpcyBhIHNvcnQgb2YgcmVsYXRlZCBpc3N1ZSwgd2hpY2ggaXMgdGhhdCBhbHRob3VnaCB0aGUgaW9zX2Jhc2UKY29uc3RydWN0b3Igc2F5cyB0aGF0IGVhY2ggaW9zX2Jhc2UgbWVtYmVyIGhhcyBhbiBpbmRldGVybWluYXRlIHZhbHVlCmFmdGVyIGNvbnN0cnVjdGlvbiwgYWxsIHRoZSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbnMgSSB0cmllZCBleHBsaWNpdGx5IHNldCAKaW9zX2Jhc2U6OmRlYy4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KPHR0PmFkanVzdGZpZWxkPC90dD4sIDx0dD5iYXNlZmllbGQ8L3R0PiwgYW5kIDx0dD5mbG9hdGZpZWxkPC90dD4KYXJlIGVhY2ggbXVsdGktYml0IGZpZWxkcy4gIEl0IGlzIHBvc3NpYmxlIHRvIHNldCBtdWx0aXBsZSBiaXRzIHdpdGhpbgplYWNoIG9mIHRob3NlIGZpZWxkcy4gIChGb3IgZXhhbXBsZSwgPHR0PmRlYzwvdHQ+IGFuZAo8dHQ+b2N0PC90dD4pLiBUaGVzZSBmaWVsZHMgYXJlIHVzZWQgYnkgbG9jYWxlIGZhY2V0cy4gIFRoZSBMV0cKcmV2aWV3ZWQgdGhlIHdheSBpbiB3aGljaCBlYWNoIG9mIHRob3NlIHRocmVlIGZpZWxkcyBpcyB1c2VkLCBhbmQKYmVsaWV2ZXMgdGhhdCBpbiBlYWNoIGNhc2UgdGhlIGJlaGF2aW9yIGlzIHdlbGwgZGVmaW5lZCBmb3IgYW55CnBvc3NpYmxlIGNvbWJpbmF0aW9uIG9mIGJpdHMuICBTZWUgZm9yIGV4YW1wbGUgVGFibGUgNTgsIGluIDIyLjIuMi4yLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0ucHV0LnZpcnR1YWxzIj4gW2xpYi5mYWNldC5udW0ucHV0LnZpcnR1YWxzXTwvYT4sIG5vdGluZyB0aGUgcmVxdWlyZW1lbnQgaW4gcGFyYWdyYXBoIDYgb2YgdGhhdApzZWN0aW9uLgo8L3A+CjxwPgpVc2VycyBhcmUgYWR2aXNlZCB0byB1c2UgbWFuaXB1bGF0b3JzLCBvciBlbHNlIHVzZSB0aGUgdHdvLWFyZ3VtZW50CnZlcnNpb24gb2YgPHR0PnNldGY8L3R0PiwgdG8gYXZvaWQgdW5leHBlY3RlZCBiZWhhdmlvci4KPC9wPgo8aHI+CjxhIG5hbWU9IjI4OSI+PGgzPjI4OS4mbmJzcDsmbHQ7Y21hdGgmZ3Q7IHJlcXVpcmVtZW50cyBtaXNzaW5nIEMgZmxvYXQgYW5kIGxvbmcgZG91YmxlIHZlcnNpb25zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjYuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5udW1hcnJheSI+IFtsaWIubnVtYXJyYXldPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0p1ZHkgV2FyZCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszMCBEZWMgMjAwMDwvcD4KPHA+CiAgICBJbiBJU08vSUVDIDk4OTk6MTk5MCBQcm9ncmFtbWluZyBMYW5ndWFnZXMgQyB3ZSBmaW5kIHRoZSBmb2xsb3dpbmcKICAgIGNvbmNlcm5pbmcgJmx0O21hdGguaCZndDs6CjwvcD4KCjxibG9ja3F1b3RlPgogICAgICAgICA3LjEzLjQgTWF0aGVtYXRpY3MgJmx0O21hdGguaCZndDsKICAgICAgICAgPGJyPgogICAgICAgICBUaGUgbmFtZXMgb2YgYWxsIGV4aXN0aW5nIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiB0aGUgJmx0O21hdGguaCZndDsKICAgICAgICAgaGVhZGVyLCBzdWZmaXhlZCB3aXRoIGYgb3IgbCwgYXJlIHJlc2VydmVkIHJlc3BlY3RpdmVseSBmb3IKICAgICAgICAgY29ycmVzcG9uZGluZyBmdW5jdGlvbnMgd2l0aCBmbG9hdCBhbmQgbG9uZyBkb3VibGUgYXJndW1lbnRzCiAgICAgICAgIGFyZSByZXR1cm4gdmFsdWVzLgo8L2Jsb2NrcXVvdGU+Cgo8cD4KICAgIEZvciBleGFtcGxlLCA8dHQ+ZmxvYXQmbmJzcDtzaW5mKGZsb2F0KTwvdHQ+CiAgICBpcyByZXNlcnZlZC4KPC9wPgoKPHA+CiAgICBJbiB0aGUgQzk5IHN0YW5kYXJkLCAmbHQ7bWF0aC5oJmd0OyBtdXN0IGNvbnRhaW4gZGVjbGFyYXRpb25zCiAgICBmb3IgdGhlc2UgZnVuY3Rpb25zLgo8L3A+Cgo8cD4KU28sIGlzIGl0IGFjY2VwdGFibGUgZm9yIGFuIGltcGxlbWVudG9yIHRvIGFkZCB0aGVzZSBwcm90b3R5cGVzIHRvIHRoZQpDKysgdmVyc2lvbnMgb2YgdGhlIG1hdGggaGVhZGVycz8gQXJlIHRoZXkgcmVxdWlyZWQ/CjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIHRoZXNlIEZ1bmN0aW9ucyB0byBUYWJsZSA4MCwgc2VjdGlvbiAyNi41IGFuZCB0byBUYWJsZSA5OSwKc2VjdGlvbiBDLjI6CjwvcD4KCjxwcmU+ICAgIGFjb3NmIGFzaW5mIGF0YW5mIGF0YW4yZiBjZWlsZiBjb3NmIGNvc2hmIAogICAgZXhwZiBmYWJzZiBmbG9vcmYgZm1vZGYgZnJleHBmIGxkZXhwZiAKICAgIGxvZ2YgbG9nMTBmIG1vZGZmIHBvd2Ygc2luZiBzaW5oZiBzcXJ0ZiAKICAgIHRhbmYgdGFuaGYgCiAgICBhY29zbCBhc2lubCBhdGFubCBhdGFuMmwgY2VpbGwgY29zbCBjb3NobCAKICAgIGV4cGwgZmFic2wgZmxvb3JsIGZtb2RsIGZyZXhwbCBsZGV4cGwgCiAgICBsb2dsIGxvZzEwbCBtb2RmbCBwb3dsIHNpbmwgc2luaGwgc3FydGwgCiAgICB0YW5sIHRhbmhsCjwvcHJlPgoKPHA+ClRoZXJlIHNob3VsZCBwcm9iYWJseSBiZSBhIG5vdGUgc2F5aW5nIHRoYXQgdGhlc2UgZnVuY3Rpb25zCmFyZSBvcHRpb25hbCBhbmQsIGlmIHN1cHBsaWVkLCBzaG91bGQgbWF0Y2ggdGhlIGRlc2NyaXB0aW9uIGluCnRoZSAxOTk5IHZlcnNpb24gb2YgdGhlIEMgc3RhbmRhcmQuIEluIHRoZSBuZXh0IHJvdW5kCm9mIEMrKyBzdGFuZGFyZGl6YXRpb24gdGhleSBjYW4gdGhlbiBiZWNvbWUgbWFuZGF0b3J5LiAKPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIEM5MCBzdGFuZGFyZCwgYXMgYW1lbmRlZCwgYWxyZWFkeSBwZXJtaXRzIChidXQgZG9lcyBub3QKcmVxdWlyZSkgdGhlc2UgZnVuY3Rpb25zLCBhbmQgdGhlIEMrKyBzdGFuZGFyZCBpbmNvcnBvcmF0ZXMgdGhlCkM5MCBzdGFuZGFyZCBieSByZWZlcmVuY2UuICBDOTkgaXMgbm90IGFuIGlzc3VlLCBiZWNhdXNlIGl0IGlzCm5ldmVyIHJlZmVycmVkIHRvIGJ5IHRoZSBDKysgc3RhbmRhcmQuPC9wPgo8aHI+CjxhIG5hbWU9IjI5MyI+PGgzPjI5My4mbmJzcDtPcmRlciBvZiBleGVjdXRpb24gaW4gdHJhbnNmb3JtIGFsZ29yaXRobTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjIuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy50cmFuc2Zvcm0iPiBbbGliLmFsZy50cmFuc2Zvcm1dPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZ2VsaWthIExhbmdlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDswNCBKYW4gMjAwMTwvcD4KPHA+VGhpcyBpc3N1ZSBpcyByZWxhdGVkIHRvIGlzc3VlIDI0Mi4gIEluIGNhc2UgdGhhdCB0aGUgcmVzb2x1dGlvbgpwcm9wb3NlZCBmb3IgaXNzdWUgMjQyIGlzIGFjY2VwdGVkLCB3ZSBoYXZlIGhhdmUgdGhlIGZvbGxvd2luZwpzaXR1YXRpb246IFRoZSA0IG51bWVyaWMgYWxnb3JpdGhtcyAoYWNjdW11bGF0ZSBhbmQgY29uc29ydHMpIGFzIHdlbGwKYXMgdHJhbnNmb3JtIHdvdWxkIGFsbG93IGEgY2VydGFpbiBjYXRlZ29yeSBvZiBzaWRlIGVmZmVjdHMuICBUaGUKbnVtZXJpYyBhbGdvcml0aG1zIHNwZWNpZnkgdGhhdCB0aGV5IGludm9rZSB0aGUgZnVuY3RvciAiZm9yCmV2ZXJ5IGl0ZXJhdG9yIGkgaW4gdGhlIHJhbmdlIFtmaXJzdCwgbGFzdCkgaW4gb3JkZXIiLiB0cmFuc2Zvcm0sCmluIGNvbnRyYXN0LCB3b3VsZCBub3QgZ2l2ZSBhbnkgZ3VhcmFudGVlIHJlZ2FyZGluZyBvcmRlciBvZgppbnZvY2F0aW9uIG9mIHRoZSBmdW5jdG9yLCB3aGljaCBtZWFucyB0aGF0IHRoZSBmdW5jdG9yIGNhbiBiZSBpbnZva2VkCmluIGFueSBhcmJpdHJhcnkgb3JkZXIuCjwvcD4KCjxwPldoeSB3b3VsZCB0aGF0IGJlIGEgcHJvYmxlbT8gIENvbnNpZGVyIGFuIGV4YW1wbGU6IHNheSB0aGUKdHJhbnNmb3JtYXRvciB0aGF0IGlzIGEgc2ltcGxlIGVudW1lcmF0b3IgKCBvciBtb3JlIGdlbmVyYWxseQpzcGVha2luZywgImlzIG9yZGVyLXNlbnNpdGl2ZSIgKS4gIFNpbmNlIGEgc3RhbmRhcmQKY29tcGxpYW50IGltcGxlbWVudGF0aW9uIG9mIHRyYW5zZm9ybSBpcyBmcmVlIHRvIGludm9rZSB0aGUgZW51bWVyYXRvcgppbiBubyBkZWZpbml0ZSBvcmRlciwgdGhlIHJlc3VsdCBjb3VsZCBiZSBhIGdhcmJsZWQgZW51bWVyYXRpb24uClN0cmljdGx5IHNwZWFraW5nIHRoaXMgaXMgbm90IGEgcHJvYmxlbSwgYnV0IGl0IGlzIGNlcnRhaW5seSBhdCBvZGRzCndpdGggdGhlIHByZXZhbGVudCB1bmRlcnN0YW5kaW5nIG9mIHRyYW5zZm9ybSBhcyBhbiBhbGdvcml0aG1zIHRoYXQKYXNzaWducyAiYSBuZXcgX2NvcnJlc3BvbmRpbmdfIHZhbHVlIiB0byB0aGUgb3V0cHV0CmVsZW1lbnRzLgo8L3A+Cgo8cD5BbGwgaW1wbGVtZW50YXRpb25zIHRoYXQgSSBrbm93IG9mIGludm9rZSB0aGUgdHJhbnNmb3JtYXRvciBpbgpkZWZpbml0ZSBvcmRlciwgbmFtZWx5IHN0YXJ0aW5nIGZyb20gZmlyc3QgYW5kIHByb2NlZWRpbmcgdG8gbGFzdCAtCjEuIFVubGVzcyB0aGVyZSBpcyBhbiBvcHRpbWl6YXRpb24gY29uY2VpdmFibGUgdGhhdCB0YWtlcyBhZHZhbnRhZ2Ugb2YKdGhlIGluZGVmaW5pdGUgb3JkZXIgSSB3b3VsZCBzdWdnZXN0IHRvIHNwZWNpZnkgdGhlIG9yZGVyLCBiZWNhdXNlIGl0CmVsaW1pbmF0ZSB0aGUgdW5jZXJ0YWludHkgdGhhdCB1c2VycyB3b3VsZCBvdGhlcndpc2UgaGF2ZSByZWdhcmRpbmcKdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiBvZiB0aGVpciBwb3RlbnRpYWxseSBvcmRlci1zZW5zaXRpdmUgZnVuY3Rpb24Kb2JqZWN0cy4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIHNlY3Rpb24gMjUuMi4zIC0gVHJhbnNmb3JtIFtsaWIuYWxnLnRyYW5zZm9ybV0gY2hhbmdlOjwvcD4KPGJsb2NrcXVvdGU+Ci0xLSBFZmZlY3RzOiBBc3NpZ25zIHRocm91Z2ggZXZlcnkgaXRlcmF0b3IgaSBpbiB0aGUgcmFuZ2UgW3Jlc3VsdCwKcmVzdWx0ICsgKGxhc3QxIC0gZmlyc3QxKSkgYSBuZXcgY29ycmVzcG9uZGluZwp2YWx1ZSBlcXVhbCB0byBvcCgqKGZpcnN0MSArIChpIC0gcmVzdWx0KSkgb3IgYmluYXJ5X29wKCooZmlyc3QxICsKKGkgLSByZXN1bHQpLCAqKGZpcnN0MiArIChpIC0gcmVzdWx0KSkpLgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+Ci0xLSBFZmZlY3RzOiBDb21wdXRlcyB2YWx1ZXMgYnkgIGludm9raW5nIHRoZSBvcGVyYXRpb24gb3Agb3IgYmluYXJ5X29wIApmb3IgZXZlcnkgaXRlcmF0b3IgaW4gdGhlIHJhbmdlIFtmaXJzdDEsIGxhc3QxKSBpbiBvcmRlci4gQXNzaWducyB0aHJvdWdoCmV2ZXJ5IGl0ZXJhdG9yIGkgaW4gdGhlIHJhbmdlIFtyZXN1bHQsIHJlc3VsdCArIChsYXN0MSAtIGZpcnN0MSkpIGEgbmV3CmNvcnJlc3BvbmRpbmcKdmFsdWUgZXF1YWwgdG8gb3AoKihmaXJzdDEgKyAoaSAtIHJlc3VsdCkpIG9yIGJpbmFyeV9vcCgqKGZpcnN0MSArCihpIC0gcmVzdWx0KSwgKihmaXJzdDIgKyAoaSAtIHJlc3VsdCkpKS4KPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+Rm9yIElucHV0IEl0ZXJhdG9ycyBhbiBvcmRlciBpcyBhbHJlYWR5IGd1YXJhbnRlZWQsIGJlY2F1c2UKb25seSBvbmUgb3JkZXIgaXMgcG9zc2libGUuICBJZiBhIHVzZXIgd2hvIHBhc3NlcyBhIEZvcndhcmQKSXRlcmF0b3IgdG8gb25lIG9mIHRoZXNlIGFsZ29yaXRobXMgcmVhbGx5IG5lZWRzIGEgc3BlY2lmaWMKb3JkZXIgb2YgZXhlY3V0aW9uLCBpdCdzIHBvc3NpYmxlIHRvIGFjaGlldmUgdGhhdCBlZmZlY3QgYnkKd3JhcHBpbmcgaXQgaW4gYW4gSW5wdXQgSXRlcmF0b3IgYWRhcHRvci48L3A+Cjxocj4KPGEgbmFtZT0iMjk2Ij48aDM+Mjk2LiZuYnNwO01pc3NpbmcgZGVzY3JpcHRpb25zIGFuZCByZXF1aXJlbWVudHMgb2YgcGFpciBvcGVyYXRvcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMC4yLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLnBhaXJzIj4gW2xpYi5wYWlyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE0IEphbiAyMDAxPC9wPgo8cD5UaGUgc3lub3BzaXMgb2YgdGhlIGhlYWRlciA8dHQ+Jmx0O3V0aWxpdHkmZ3Q7PC90dD4gaW4gMjAuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIudXRpbGl0eSI+IFtsaWIudXRpbGl0eV08L2E+Cmxpc3RzIHRoZSBjb21wbGV0ZSBzZXQgb2YgZXF1YWxpdHkgYW5kIHJlbGF0aW9uYWwgb3BlcmF0b3JzIGZvciA8dHQ+cGFpcjwvdHQ+CmJ1dCB0aGUgc2VjdGlvbiBkZXNjcmliaW5nIHRoZSB0ZW1wbGF0ZSBhbmQgdGhlIG9wZXJhdG9ycyBvbmx5IGRlc2NyaWJlcwo8dHQ+b3BlcmF0b3I9PSgpPC90dD4gYW5kIDx0dD5vcGVyYXRvciZsdDsoKTwvdHQ+LCBhbmQgaXQgZmFpbHMgdG8gbWVudGlvbgphbnkgcmVxdWlyZW1lbnRzIG9uIHRoZSB0ZW1wbGF0ZSBhcmd1bWVudHMuIFRoZSByZW1haW5pbmcgb3BlcmF0b3JzIGFyZQpub3QgbWVudGlvbmVkIGF0IGFsbC4KPC9wPiAKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+MjAuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5vcGVyYXRvcnMiPiBbbGliLm9wZXJhdG9yc108L2E+IHBhcmFncmFwaCAxMCBhbHJlYWR5IHNwZWNpZmllcyB0aGUgc2VtYW50aWNzLgpUaGF0IHBhcmFncmFwaCBzYXlzIHRoYXQsIGlmIGRlY2xhcmF0aW9ucyBvZiBvcGVyYXRvciE9LCBvcGVyYXRvciZndDssCm9wZXJhdG9yJmx0Oz0sIGFuZCBvcGVyYXRvciZndDs9IGFwcGVhciB3aXRob3V0IGRlZmluaXRpb25zLCB0aGV5IGFyZQpkZWZpbmVkIGFzIHNwZWNpZmllZCBpbiAyMC4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLm9wZXJhdG9ycyI+IFtsaWIub3BlcmF0b3JzXTwvYT4uICBUaGVyZSBzaG91bGQgYmUgbm8gdXNlcgpjb25mdXNpb24sIHNpbmNlIHRoYXQgcGFyYWdyYXBoIGhhcHBlbnMgdG8gaW1tZWRpYXRlbHkgcHJlY2VkZSB0aGUKc3BlY2lmaWNhdGlvbiBvZiA8dHQ+cGFpcjwvdHQ+LjwvcD4KPGhyPgo8YSBuYW1lPSIzMDIiPjxoMz4zMDIuJm5ic3A7TmVlZCBlcnJvciBpbmRpY2F0aW9uIGZyb20gY29kZWN2dCZsdDsmZ3Q7Ojpkb19sZW5ndGg8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZSI+IFtsaWIubG9jYWxlLmNvZGVjdnQuYnluYW1lXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtHcmVnb3J5IEJ1bWdhcmRuZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjUgSmFuIDIwMDE8L3A+CjxwPgpUaGUgZWZmZWN0cyBvZiA8dHQ+Y29kZWN2dCZsdDsmZ3Q7Ojpkb19sZW5ndGgoKTwvdHQ+IGFyZSBkZXNjcmliZWQgaW4KMjIuMi4xLjUuMiwgcGFyYWdyYXBoIDEwLiAgQXMgaW1wbGllZCBieSB0aGF0IHBhcmFncmFwaCwgYW5kIGNsYXJpZmllZAppbiBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNzUiPjc1PC9hPiwgPHR0PmNvZGVjdnQmbHQ7Jmd0Ozo6ZG9fbGVuZ3RoKCk8L3R0PiBtdXN0CnByb2Nlc3MgdGhlIHNvdXJjZSBkYXRhIGFuZCB1cGRhdGUgdGhlIDx0dD5zdGF0ZVQ8L3R0PiBhcmd1bWVudCBqdXN0CmFzIGlmIHRoZSBkYXRhIGhhZCBiZWVuIHByb2Nlc3NlZCBieSA8dHQ+Y29kZWN2dCZsdDsmZ3Q7OjppbigpPC90dD4uCkhvd2V2ZXIsIHRoZSBzdGFuZGFyZCBkb2VzIG5vdCBzcGVjaWZ5IGhvdyA8dHQ+ZG9fbGVuZ3RoKCk8L3R0PiB3b3VsZApyZXBvcnQgYSB0cmFuc2xhdGlvbiBmYWlsdXJlLCBzaG91bGQgdGhlIHNvdXJjZSBzZXF1ZW5jZSBjb250YWluCnVudHJhbnNsYXRhYmxlIG9yIGlsbGVnYWwgY2hhcmFjdGVyIHNlcXVlbmNlcy4KPC9wPgoKPHA+ClRoZSBvdGhlciBjb252ZXJzaW9uIG1ldGhvZHMgcmV0dXJuIGFuICJlcnJvciIgcmVzdWx0IHZhbHVlCnRvIGluZGljYXRlIHRoYXQgYW4gdW50cmFuc2xhdGFibGUgY2hhcmFjdGVyIGhhcyBiZWVuIGVuY291bnRlcmVkLCBidXQKPHR0PmRvX2xlbmd0aCgpPC90dD4gYWxyZWFkeSBoYXMgYSByZXR1cm4gdmFsdWUgKHRoZSBudW1iZXIgb2Ygc291cmNlCmNoYXJhY3RlcnMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkIGJ5IHRoZSBtZXRob2QpLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClRoaXMgaXNzdWUgY2Fubm90IGJlIHJlc29sdmVkIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBpbnRlcmZhY2UuIEFuIGV4Y2VwdGlvbgpjYW5ub3QgYmUgdXNlZCwgYXMgdGhlcmUgd291bGQgYmUgbm8gd2F5IHRvIGRldGVybWluZSBob3cgbWFueSBjaGFyYWN0ZXJzCmhhdmUgYmVlbiBwcm9jZXNzZWQgYW5kIHRoZSBzdGF0ZSBvYmplY3Qgd291bGQgYmUgbGVmdCBpbiBhbiBpbmRldGVybWluYXRlCnN0YXRlLgo8L3A+Cgo8cD4KQSBzb3VyY2UgY29tcGF0aWJsZSBzb2x1dGlvbiBpbnZvbHZlcyBhZGRpbmcgYSBmaWZ0aCBhcmd1bWVudCB0byBsZW5ndGgoKQphbmQgZG9fbGVuZ3RoKCkgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJldHVybiBwb3NpdGlvbiBvZiB0aGUgb2ZmZW5kaW5nCmNoYXJhY3RlciBzZXF1ZW5jZS4gVGhpcyBhcmd1bWVudCB3b3VsZCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSB0aGF0IHdvdWxkCmFsbG93IGl0IHRvIGJlIGlnbm9yZWQ6CjwvcD4KCjxwcmU+ICBpbnQgbGVuZ3RoKHN0YXRlVCZhbXA7IHN0YXRlLCAKICAgICAgICAgICAgIGNvbnN0IGV4dGVyblQqIGZyb20sIAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuVCogZnJvbV9lbmQsIAogICAgICAgICAgICAgc2l6ZV90IG1heCwKICAgICAgICAgICAgIGNvbnN0IGV4dGVyblQqKiBmcm9tX25leHQgPSAwKTsKCiAgdmlydHVhbAogIGludCBkb19sZW5ndGgoc3RhdGVUJmFtcDsgc3RhdGUsIAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuVCogZnJvbSwgCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5UKiBmcm9tX2VuZCwgCiAgICAgICAgICAgICAgICBzaXplX3QgbWF4LAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuVCoqIGZyb21fbmV4dCk7CjwvcHJlPgoKPHA+ClRoZW4gYW4gZXhjZXB0aW9uIGNvdWxkIGJlIHVzZWQgdG8gcmVwb3J0IGFueSB0cmFuc2xhdGlvbiBlcnJvcnMgYW5kCnRoZSBmcm9tX25leHQgYXJndW1lbnQsIGlmIHVzZWQsIGNvdWxkIHRoZW4gYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUKbG9jYXRpb24gb2YgdGhlIG9mZmVuZGluZyBjaGFyYWN0ZXIgc2VxdWVuY2UuCjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBzdGFuZGFyZCBpcyBhbHJlYWR5IGNsZWFyOiB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YKInZhbGlkIGNvbXBsZXRlIGNoYXJhY3RlcnMiLiAgSWYgaXQgZW5jb3VudGVycyBhbiBpbnZhbGlkIHNlcXVlbmNlIG9mCmV4dGVybmFsIGNoYXJhY3RlcnMsIGl0IHN0b3BzLjwvcD4KPGhyPgo8YSBuYW1lPSIzMDQiPjxoMz4zMDQuJm5ic3A7TXVzdCA8dHQ+KmE8L3R0PiByZXR1cm4gYW4gbHZhbHVlIHdoZW4gPHR0PmE8L3R0PiBpcyBhbiBpbnB1dCBpdGVyYXRvcj88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHMiPiBbbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGF2ZSBBYnJhaGFtcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs1IEZlYiAyMDAxPC9wPgo8cD4KV2UgYWxsICJrbm93IiB0aGF0IGlucHV0IGl0ZXJhdG9ycyBhcmUgYWxsb3dlZCB0byBwcm9kdWNlCnZhbHVlcyB3aGVuIGRlcmVmZXJlbmNlZCBvZiB3aGljaCB0aGVyZSBpcyBubyBvdGhlciBpbi1tZW1vcnkgY29weS4KPC9wPgoKPHA+CkJ1dDogVGFibGUgNzIsIHdpdGggYSBjYXJlZnVsIHJlYWRpbmcsIHNlZW1zIHRvIGltcGx5IHRoYXQgdGhpcyBjYW4gb25seSBiZQp0aGUgY2FzZSBpZiB0aGUgdmFsdWVfdHlwZSBoYXMgbm8gbWVtYmVycyAoZS5nLiBpcyBhIGJ1aWx0LWluIHR5cGUpLgo8L3A+Cgo8cD5UaGUgcHJvYmxlbSBvY2N1cnMgaW4gdGhlIGZvbGxvd2luZyBlbnRyeTo8L3A+Cgo8cHJlPiAgYS0mZ3Q7bSAgICAgcHJlOiAoKmEpLm0gaXMgd2VsbC1kZWZpbmVkCiAgICAgICAgICAgRXF1aXZhbGVudCB0byAoKmEpLm0KPC9wcmU+Cgo8cD4KPHR0PiphLm08L3R0PiBjYW4gYmUgd2VsbC1kZWZpbmVkIGlmIDx0dD4qYTwvdHQ+IGlzIG5vdCBhIHJlZmVyZW5jZQp0eXBlLCBidXQgc2luY2UgPHR0Pm9wZXJhdG9yLSZndDsoKTwvdHQ+IG11c3QgcmV0dXJuIGEgcG9pbnRlciBmb3IKPHR0PmEtJmd0O208L3R0PiB0byBiZSB3ZWxsLWZvcm1lZCwgaXQgbmVlZHMgc29tZXRoaW5nIHRvIHJldHVybiBhCnBvaW50ZXIgPGk+dG88L2k+LiBUaGlzIHNlZW1zIHRvIGluZGljYXRlIHRoYXQgPHR0PiphPC90dD4gbXVzdCBiZQpidWZmZXJlZCBzb21ld2hlcmUgdG8gbWFrZSBhIGxlZ2FsIGlucHV0IGl0ZXJhdG9yLgo8L3A+Cgo8cD5JIGRvbid0IHRoaW5rIHRoaXMgd2FzIGludGVudGlvbmFsLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIGN1cnJlbnQgc3RhbmRhcmQgaXMgY2xlYXIgYW5kIGNvbnNpc3RlbnQuICBJbnB1dCBpdGVyYXRvcnMgdGhhdAogIHJldHVybiBydmFsdWVzIGFyZSBpbiBmYWN0IGltcGxlbWVudGFibGUuICBUaGV5IG1heSBpbiBzb21lIGNhc2VzCiAgcmVxdWlyZSBleHRyYSB3b3JrLCBidXQgaXQgaXMgc3RpbGwgcG9zc2libGUgdG8gZGVmaW5lIGFuIG9wZXJhdG9yLSZndDsKICBpbiBzdWNoIGNhc2VzOiBpdCBkb2Vzbid0IGhhdmUgdG8gcmV0dXJuIGEgVCosIGJ1dCBtYXkgcmV0dXJuIGEKICBwcm94eSB0eXBlLiAgTm8gY2hhbmdlIHRvIHRoZSBzdGFuZGFyZCBpcyBqdXN0aWZpZWQuPC9wPgo8aHI+CjxhIG5hbWU9IjMxMyI+PGgzPjMxMy4mbmJzcDtzZXRfdGVybWluYXRlIGFuZCBzZXRfdW5leHBlY3RlZCBxdWVzdGlvbjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE4LjcuMy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIudGVybWluYXRlIj4gW2xpYi50ZXJtaW5hdGVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0p1ZHkgV2FyZCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIEFwciAyMDAxPC9wPgo8cD4KQWNjb3JkaW5nIHRvIHNlY3Rpb24gMTguNy4zLjMgb2YgdGhlIHN0YW5kYXJkLCBzdGQ6OnRlcm1pbmF0ZSgpIGlzCnN1cHBvc2VkIHRvIGNhbGwgdGhlIHRlcm1pbmF0ZV9oYW5kbGVyIGluIGVmZmVjdCBpbW1lZGlhdGVseSBhZnRlcgpldmFsdWF0aW5nIHRoZSB0aHJvdyBleHByZXNzaW9uLgo8L3A+Cgo8cD4KUXVlc3Rpb246IHdoYXQgaWYgdGhlIHRlcm1pbmF0ZV9oYW5kbGVyIGluIGVmZmVjdCBpcyBpdHNlbGYKc3RkOjp0ZXJtaW5hdGU/CjwvcD4KCjxwPkZvciBleGFtcGxlOjwvcD4KCjxwcmU+ICAjaW5jbHVkZSAmbHQ7ZXhjZXB0aW9uJmd0OwoKICBpbnQgbWFpbiAoKSB7CiAgICAgIHN0ZDo6c2V0X3Rlcm1pbmF0ZShzdGQ6OnRlcm1pbmF0ZSk7CiAgICAgIHRocm93IDU7CiAgICAgIHJldHVybiAwOwogIH0KPC9wcmU+Cgo8cD4KSXMgdGhlIGltcGxlbWVudGF0aW9uIGFsbG93ZWQgdG8gZ28gaW50byBhbiBpbmZpbml0ZSBsb29wPwo8L3A+Cgo8cD4KSSB0aGluayB0aGUgc2FtZSBpc3N1ZSBhcHBsaWVzIHRvIHN0ZDo6c2V0X3VuZXhwZWN0ZWQuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+SW5maW5pdGUgcmVjdXJzaW9uIGlzIHRvIGJlIGV4cGVjdGVkOiB1c2VycyB3aG8gc2V0IHRoZSB0ZXJtaW5hdGUKaGFuZGxlciB0byA8dHQ+dGVybWluYXRlPC90dD4gYXJlIGV4cGxpY2l0bHkgYXNraW5nIGZvciA8dHQ+dGVybWluYXRlPC90dD4KdG8gY2FsbCBpdHNlbGYuPC9wPgo8aHI+CjxhIG5hbWU9IjMxNCI+PGgzPjMxNC4mbmJzcDtJcyB0aGUgc3RhY2sgdW53b3VuZCB3aGVuIHRlcm1pbmF0ZSgpIGlzIGNhbGxlZD88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxOC43LjMuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLnRlcm1pbmF0ZSI+IFtsaWIudGVybWluYXRlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEZXRsZWYgVm9sbG1hbm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTEgQXByIDIwMDE8L3A+Cgo8cD4KVGhlIHN0YW5kYXJkIGFwcGVhcnMgdG8gY29udHJhZGljdCBpdHNlbGYgYWJvdXQgd2hldGhlciB0aGUgc3RhY2sgaXMKdW53b3VuZCB3aGVuIHRoZSBpbXBsZW1lbnRhdGlvbiBjYWxscyB0ZXJtaW5hdGUoKS4KPC9wPgoKPHA+RnJvbSAxOC43LjMuM3AyOjwvcD4KPGJsb2NrcXVvdGU+CiAgICBDYWxscyB0aGUgdGVybWluYXRlX2hhbmRsZXIgZnVuY3Rpb24gaW4gZWZmZWN0IGltbWVkaWF0ZWx5CiAgICBhZnRlciBldmFsdWF0aW5nIHRoZSB0aHJvdy1leHByZXNzaW9uIChsaWIudGVybWluYXRlLmhhbmRsZXIpLAogICAgaWYgY2FsbGVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBbLi4uXQo8L2Jsb2NrcXVvdGU+Cgo8cD5TbyB0aGUgc3RhY2sgaXMgZ3VhcmFudGVlZCBub3QgdG8gYmUgdW53b3VuZC48L3A+Cgo8cD5CdXQgZnJvbSAxNS4zcDk6PC9wPgo8YmxvY2txdW90ZT4KICAgIFsuLi5dd2hldGhlciBvciBub3QgdGhlIHN0YWNrIGlzIHVud291bmQgYmVmb3JlIHRoaXMgY2FsbAogICAgdG8gdGVybWluYXRlKCkgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZCAoZXhjZXB0LnRlcm1pbmF0ZSkuCjwvYmxvY2txdW90ZT4KCjxwPgpBbmQgMTUuNS4xIGFjdHVhbGx5IGRlZmluZXMgdGhhdCBpbiBtb3N0IGNhc2VzIHRoZSBzdGFjayBpcyB1bndvdW5kLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZXJlIGlzIGRlZmluaXRlbHkgbm8gY29udHJhZGljdGlvbiBiZXR3ZWVuIHRoZSBjb3JlIGFuZCBsaWJyYXJ5CmNsYXVzZXM7IG5vdGhpbmcgaW4gdGhlIGNvcmUgY2xhdXNlcyBzYXlzIHRoYXQgc3RhY2sgdW53aW5kaW5nIGhhcHBlbnMKYWZ0ZXIgPHR0PnRlcm1pbmF0ZTwvdHQ+IGlzIGNhbGxlZC4gIDE4LjcuMy4zcDIgZG9lcyBub3Qgc2F5IGFueXRoaW5nCmFib3V0IHdoZW4gdGVybWluYXRlKCkgaXMgY2FsbGVkOyBpdCBtZXJlbHkgc3BlY2lmaWVzIHdoaWNoCjx0dD50ZXJtaW5hdGVfaGFuZGxlcjwvdHQ+IGlzIHVzZWQuPC9wPgo8aHI+CjxhIG5hbWU9IjMyMyI+PGgzPjMyMy4mbmJzcDthYnMoKSBvdmVybG9hZHMgaW4gZGlmZmVyZW50IGhlYWRlcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNi41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLm51bWFycmF5Ij4gW2xpYi5udW1hcnJheV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRnV0dXJlIj5GdXR1cmU8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGF2ZSBBYnJhaGFtcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs0IEp1bmUgMjAwMTwvcD4KPHA+Q3VycmVudGx5IHRoZSBzdGFuZGFyZCBtYW5kYXRlcyB0aGUgZm9sbG93aW5nIG92ZXJsb2FkcyBvZgphYnMoKTo8L3A+Cgo8cHJlPiAgICBhYnMobG9uZyksIGFicyhpbnQpIGluICZsdDtjc3RkbGliJmd0OwoKICAgIGFicyhmbG9hdCksIGFicyhkb3VibGUpLCBhYnMobG9uZyBkb3VibGUpIGluICZsdDtjbWF0aCZndDsKCiAgICB0ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyBUIGFicyhjb25zdCBjb21wbGV4Jmx0O1QmZ3Q7JmFtcDspIGluICZsdDtjb21wbGV4Jmd0OwoKICAgIHRlbXBsYXRlJmx0O2NsYXNzIFQmZ3Q7IHZhbGFycmF5Jmx0O1QmZ3Q7IGFicyhjb25zdCB2YWxhcnJheSZsdDtUJmd0OyZhbXA7KTsgaW4gJmx0O3ZhbGFycmF5Jmd0Owo8L3ByZT4KCjxwPgpUaGUgcHJvYmxlbSBpcyB0aGF0IGhhdmluZyBvbmx5IHNvbWUgb3ZlcmxvYWRzIHZpc2libGUgb2YgYSBmdW5jdGlvbgp0aGF0IHdvcmtzIG9uICJpbXBsaWNpdGx5IGludGVyLWNvbnZlcnRpYmxlIiB0eXBlcyBpcyBkYW5nZXJvdXMgaW4KcHJhY3RpY2UuIFRoZSBoZWFkZXJzIHRoYXQgZ2V0IGluY2x1ZGVkIGF0IGFueSBwb2ludCBpbiBhIHRyYW5zbGF0aW9uCnVuaXQgY2FuIGNoYW5nZSB1bnByZWRpY3RhYmx5IGR1cmluZyBwcm9ncmFtCmRldmVsb3BtZW50L21haW50ZW5hbmNlLiBUaGUgd3Jvbmcgb3ZlcmxvYWQgbWlnaHQgYmUgdW5pbnRlbnRpb25hbGx5CnNlbGVjdGVkLgo8L3A+Cgo8cD4KQ3VycmVudGx5LCB0aGVyZSBpcyBub3RoaW5nIHRoYXQgbWFuZGF0ZXMgdGhlIHNpbXVsdGFuZW91cyB2aXNpYmlsaXR5Cm9mIHRoZXNlIG92ZXJsb2Fkcy4gSW5kZWVkLCBzb21lIHZlbmRvcnMgaGF2ZSBiZWd1biBmYXN0aWRpb3VzbHkKcmVkdWNpbmcgZGVwZW5kZW5jaWVzIGFtb25nIHRoZWlyIChwdWJsaWMpIGhlYWRlcnMgYXMgYSBRT0kgaXNzdWU6IGl0CmhlbHBzIHBlb3BsZSB0byB3cml0ZSBwb3J0YWJsZSBjb2RlIGJ5IHJlZnVzaW5nIHRvIGNvbXBpbGUgdW5sZXNzIGFsbAp0aGUgY29ycmVjdCBoZWFkZXJzIGFyZSAjaW5jbHVkZWQuCjwvcD4KCjxwPlRoZSBzYW1lIGlzc3VlIG1heSBleGlzdCBmb3Igb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBsaWJyYXJ5LjwvcD4KCjxwPlJlZG1vbmQ6IFBKUCByZXBvcnRzIHRoYXQgQzk5IGFkZHMgdHdvIG5ldyBraW5kcyBvZiBhYnM6IGNvbXBsZXgsCmFuZCBpbnRfbWF4X2Ficy48L3A+Cgo8cD5SZWxhdGVkIGlzc3VlOiA8Zm9udCBjb2xvcj0icmVkIj4zNDM8L2ZvbnQ+LjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBwcm9ncmFtcyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGJyb2tlbiBieSB0aGlzIHNpdHVhdGlvbiBhcmUKICBhbHJlYWR5IGZyYWdpbGUsIGFuZCBzb21ld2hhdCBjb250cml2ZWQ6IEZvciBleGFtcGxlLCBhIHVzZXItZGVmaW5lZAogIGNsYXNzIHRoYXQgaGFzIGNvbnZlcnNpb24gb3ZlcmxvYWRzIGJvdGggdG8gPHR0Pmxvbmc8L3R0PiBhbmQKICB0byA8dHQ+ZmxvYXQ8L3R0Pi4gIElmIDx0dD54PC90dD4gaXMgYSB2YWx1ZSBvZiBzdWNoIGEgY2xhc3MsIHRoZW4KICA8dHQ+YWJzKHgpPC90dD4gd291bGQgZ2l2ZSB0aGUgPHR0Pmxvbmc8L3R0PiB2ZXJzaW9uIGlmIHRoZSB1c2VyCiAgaW5jbHVkZWQgJmx0O2NzdGRsaWImZ3Q7LCB0aGUgPHR0PmZsb2F0PC90dD4gdmVyc2lvbiBpZiB0aGUgdXNlcgogIGluY2x1ZGVkICZsdDtjbWF0aCZndDssIGFuZCB3b3VsZCBiZSBkaWFnbm9zZWQgYXMgYW1iaWd1b3VzIGF0CiAgY29tcGlsZSB0aW1lIGlmIHRoZSB1c2VyIGluY2x1ZGVkIGJvdGggaGVhZGVycy4gIFRoZSBMV0cgY291bGRuJ3QKICBmaW5kIGFuIGV4YW1wbGUgb2YgYSBwcm9ncmFtIHdob3NlIG1lYW5pbmcgd291bGQgYmUgY2hhbmdlZCAoYXMKICBvcHBvc2VkIHRvIGNoYW5naW5nIGl0IGZyb20gd2VsbC1mb3JtZWQgdG8gaWxsLWZvcm1lZCkgc2ltcGx5IGJ5CiAgYWRkaW5nIGFub3RoZXIgc3RhbmRhcmQgaGVhZGVyLjwvcD4KCjxwPlNpbmNlIHRoZSBoYXJtIHNlZW1zIG1pbmltYWwsIGFuZCB0aGVyZSBkb24ndCBzZWVtIHRvIGJlIGFueSBzaW1wbGUKICBhbmQgbm9uaW52YXNpdmUgc29sdXRpb25zLCB0aGlzIGlzIGJlaW5nIGNsb3NlZCBhcyBOQUQuICBJdCBpcwogIG1hcmtlZCBhcyAiRnV0dXJlIiBmb3IgdHdvIHJlYXNvbnMuICBGaXJzdCwgaXQgbWlnaHQgYmUgdXNlZnVsIHRvCiAgZGVmaW5lIGFuIDx0dD4mbHQ7YWxsJmd0OzwvdHQ+IGhlYWRlciB0aGF0IHdvdWxkIGluY2x1ZGUgYWxsCiAgU3RhbmRhcmQgTGlicmFyeSBoZWFkZXJzLiAgU2Vjb25kLCB3ZSBzaG91bGQgYXQgbGVhc3QgbWFrZSBzdXJlIHRoYXQKICBmdXR1cmUgbGlicmFyeSBleHRlbnNpb25zIGRvbid0IG1ha2UgdGhpcyBwcm9ibGVtIHdvcnNlLjwvcD4KPGhyPgo8YSBuYW1lPSIzMjYiPjxoMz4zMjYuJm5ic3A7TWlzc2luZyB0eXBlZGVmIGluIG1vbmV5cHVuY3RfYnluYW1lPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi42LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubW9uZXlwdW5jdC5ieW5hbWUiPiBbbGliLmxvY2FsZS5tb25leXB1bmN0LmJ5bmFtZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzA1IEp1bCAyMDAxPC9wPgo8cD5UaGUgZGVmaW5pdGlvbiBvZiB0aGUgbW9uZXlwdW5jdCBmYWNldCBjb250YWlucyB0aGUgdHlwZWRlZnMgY2hhcl90eXBlCmFuZCBzdHJpbmdfdHlwZS4gT25seSBvbmUgb2YgdGhlc2UgbmFtZXMsIHN0cmluZ190eXBlLCBpcyBkZWZpbmVkIGluCnRoZSBkZXJpdmVkIGZhY2V0LCBtb25leXB1bmN0X2J5bmFtZS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Rm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIG51bXB1bmN0IGZhY2V0LCBhZGQgYSB0eXBlZGVmIGZvcgpjaGFyX3R5cGUgdG8gdGhlIGRlZmluaXRpb24gb2YgdGhlIG1vbmV5cHVuY3RfYnluYW1lIGZhY2V0IGluCjIyLjIuNi40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLm1vbmV5cHVuY3QuYnluYW1lIj4gW2xpYi5sb2NhbGUubW9uZXlwdW5jdC5ieW5hbWVdPC9hPi48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgYWJzZW5jZSBvZiB0aGUgdHlwZWRlZiBpcyBpcnJlbGV2YW50LiAgVXNlcnMgY2FuIHN0aWxsIGFjY2Vzcwp0aGUgdHlwZWRlZiwgYmVjYXVzZSBpdCBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgYmFzZSBjbGFzcy48L3A+Cjxocj4KPGEgbmFtZT0iMzMwIj48aDM+MzMwLiZuYnNwO01pc2xlYWRpbmcgImV4cG9zaXRpb24gb25seSIgdmFsdWUgaW4gY2xhc3MgbG9jYWxlIGRlZmluaXRpb248L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUiPiBbbGliLmxvY2FsZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE1IEp1bCAyMDAxPC9wPgo8cD4KVGhlICJleHBvc2l0aW9uIG9ubHkiIHZhbHVlIG9mIHRoZSBzdGQ6OmxvY2FsZTo6bm9uZSBjb25zdGFudCBzaG93biBpbgp0aGUgZGVmaW5pdGlvbiBvZiBjbGFzcyBsb2NhbGUgaXMgbWlzbGVhZGluZyBpbiB0aGF0IGl0IG9uIG1hbnkKc3lzdGVtcyBjb25mbGljdHMgd2l0aCB0aGUgdmFsdWUgYXNzaWduZWQgdG8gb25lIGlmIHRoZSBMQ19YWFgKY29uc3RhbnRzIChzcGVjaWZpY2FsbHksIExDX0NPTExBVEUgb24gQUlYLCBMQ19BTEwgb24gSFAtVVgsIExDX0NUWVBFCm9uIExpbnV4IGFuZCBTdW5PUykuIFRoaXMgY2F1c2VzIGluY29ycmVjdCBiZWhhdmlvciB3aGVuIHN1Y2ggYQpjb25zdGFudCBpcyBwYXNzZWQgdG8gb25lIG9mIHRoZSBsb2NhbGUgbWVtYmVyIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdCBhCmxvY2FsZTo6Y2F0ZWdvcnkgYXJndW1lbnQgYW5kIGludGVycHJldCBpdCBhcyBlaXRoZXIgdGhlIEMgTENfWFhYCmNvbnN0YW50IG9yIGEgYml0bWFwIG9mIGxvY2FsZTo6Y2F0ZWdvcnkgdmFsdWVzLiBBdCBsZWFzdCB0aHJlZSBtYWpvcgppbXBsZW1lbnRhdGlvbnMgYWRvcHQgdGhlIHN1Z2dlc3RlZCB2YWx1ZSB3aXRob3V0IGEgY2hhbmdlIGFuZApjb25zZXF1ZW50bHkgc3VmZmVyIGZyb20gdGhpcyBwcm9ibGVtLgo8L3A+Cgo8cD4KRm9yIGluc3RhbmNlLCB0aGUgZm9sbG93aW5nIGNvZGUgd2lsbCAocHJlc3VtYWJseSkgaW5jb3JyZWN0bHkgY29weSBmYWNldHMKYmVsb25naW5nIHRvIHRoZSBjb2xsYXRlIGNhdGVnb3J5IGZyb20gdGhlIEdlcm1hbiBsb2NhbGUgb24gQUlYOgo8L3A+Cgo8cHJlPiAgc3RkOjpsb2NhbGUgbCAoc3RkOjpsb2NhbGUgKCJDIiksICJkZV9ERSIsIHN0ZDo6bG9jYWxlOjpub25lKTsKPC9wcmU+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgYWdyZWVzIHRoYXQgaXQgbWF5IGJlIGRpZmZpY3VsdCB0byBpbXBsZW1lbnQgbG9jYWxlIG1lbWJlcgpmdW5jdGlvbnMgaW4gc3VjaCBhIHdheSB0aGF0IHRoZXkgY2FuIHRha2UgZWl0aGVyIDx0dD5jYXRlZ29yeTwvdHQ+CmFyZ3VtZW50cyBvciB0aGUgTENfIGNvbnN0YW50cyBkZWZpbmVkIGluICZsdDtjY3R5cGUmZ3Q7LiAgSW4gbGlnaHQgb2YKdGhpcyByZXF1aXJlbWVudCAoMjIuMS4xLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jYXRlZ29yeSI+IFtsaWIubG9jYWxlLmNhdGVnb3J5XTwvYT4sIHBhcmFncmFwaCAyKSwgYW5kIGluIGxpZ2h0Cm9mIHRoZSByZXF1aXJlbWVudCBpbiB0aGUgcHJlY2VkaW5nIHBhcmFncmFwaCB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvCmNvbWJpbmUgPHR0PmNhdGVnb3J5PC90dD4gYml0bWFzayBlbGVtZW50cyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucywKZGVmaW5pbmcgdGhlIDx0dD5jYXRlZ29yeTwvdHQ+IGVsZW1lbnRzIGlzIGRlbGljYXRlLApwYXJ0aWN1bGFybHkgaWYgYW4gaW1wbGVtZW50b3IgaXMgY29uc3RyYWluZWQgdG8gd29yayB3aXRoIGEKcHJlZXhpc3RpbmcgQyBsaWJyYXJ5LiAgKEp1c3QgdXNpbmcgdGhlIGV4aXN0aW5nIExDXyBjb25zdGFudHMgd291bGQKbm90IHdvcmsgaW4gZ2VuZXJhbC4pICBUaGVyZSdzIG5vIHNldCBvZiAiZXhwb3NpdGlvbiBvbmx5IiB2YWx1ZXMgdGhhdApjb3VsZCBnaXZlIGxpYnJhcnkgaW1wbGVtZW50b3JzIHByb3BlciBndWlkYW5jZSBpbiBzdWNoIGEgZGVsaWNhdGUKbWF0dGVyLiAgVGhlIG5vbi1ub3JtYXRpdmUgZXhhbXBsZSB3ZSdyZSBnaXZpbmcgaXMgbm8gd29yc2UgdGhhbgphbnkgb3RoZXIgY2hvaWNlIHdvdWxkIGJlLjwvcD4KCjxwPlNlZSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzQ3Ij4zNDc8L2E+LjwvcD4KPGhyPgo8YSBuYW1lPSIzMzIiPjxoMz4zMzIuJm5ic3A7Q29uc2lkZXIgYWRkaW5nIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IG9wZXJhdG9ycyB0byBzdGQ6OmZwb3MmbHQ7IFQgJmd0OyA8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy40LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZwb3MiPiBbbGliLmZwb3NdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1ByZW1BbmFuZCBNLiBSYW8mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjcgQXVnIDIwMDE8L3A+CjxwPgpJbmNyZW1lbnQgYW5kIGRlY3JlbWVudCBvcGVyYXRvcnMgYXJlIG1pc3NpbmcgZnJvbSAKVGFibGUgODggLS0gUG9zaXRpb24gdHlwZSByZXF1aXJlbWVudHMgaW4gMjcuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5mcG9zIj4gW2xpYi5mcG9zXTwvYT4uCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KVGFibGUgODggKHNlY3Rpb24gMjcuNC4zKSAtLSBQb3NpdGlvbiB0eXBlIHJlcXVpcmVtZW50cwpiZSB1cGRhdGVkIHRvIGluY2x1ZGUgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgb3BlcmF0b3JzLgo8L3A+Cgo8cHJlPmV4cHJlc3Npb24gICAgICAgIHJldHVybiB0eXBlICAgICBvcGVyYXRpb25hbCAgICBub3RlCgorK3AgICAgICAgICAgICAgICBmcG9zJmFtcDsgICAgICAgICAgIHAgKz0gTygxKQpwKysgICAgICAgICAgICAgICBmcG9zICAgICAgICAgICAgeyBQIHRtcCA9IHA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRtcDsgfQotLXAgICAgICAgICAgICAgICBmcG9zJmFtcDsgICAgICAgICAgIHAgLT0gTygxKQpwLS0gICAgICAgICAgICAgICBmcG9zICAgICAgICAgICAgeyBQIHRtcCA9IHA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRtcDsgfQo8L3ByZT4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGJlbGlldmVzIHRoaXMgaXMgYSByZXF1ZXN0IGZvciBleHRlbnNpb24sIG5vdCBhIGRlZmVjdApyZXBvcnQuICBBZGRpdGlvbmFsbHksIG5vYm9keSBzYXcgYSBjbGVhciBuZWVkIGZvciB0aGlzIGV4dGVuc2lvbjsKPHR0PmZwb3M8L3R0PiBpcyB1c2VkIG9ubHkgaW4gdmVyeSBsaW1pdGVkIHdheXMuPC9wPgo8aHI+CjxhIG5hbWU9IjM0NCI+PGgzPjM0NC4mbmJzcDtncm91cGluZyArIHNob3diYXNlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuY2F0ZWdvcnkubnVtZXJpYyI+IFtsaWIuY2F0ZWdvcnkubnVtZXJpY108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SG93YXJkIEhpbm5hbnQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTMgT2N0IDIwMDE8L3A+CjxwPgpXaGVuIGJvdGggZ3JvdXBpbmcgYW5kIHNob3diYXNlIGFyZSBhY3RpdmUgYW5kIHRoZSBiYXNlZmllbGQgaXMgb2N0YWwsIApkb2VzIHRoZSBsZWFkaW5nIDAgcGFydGljaXBhdGUgaW4gdGhlIGdyb3VwaW5nIG9yIG5vdD8gIEZvciBleGFtcGxlLCAKc2hvdWxkIG9uZSBmb3JtYXQgYXM6IDAsMTIzLDQ1NiBvciAwMTIzLDQ1Nj8KPC9wPgo8cD4KQW4gYW5hbG9neSBjYW4gYmUgZHJhd24gd2l0aCBoZXhhZGVjaW1hbC4gIEl0IGFwcGVhcnMgdGhhdCAweDEyMyw0NTYgaXMgCnByZWZlcnJlZCBvdmVyIDB4LDEyMyw0NTYuICBIb3dldmVyLCB0aGlzIGFuYWxvZ3kgaXMgbm90IHVuaXZlcnNhbGx5IAphY2NlcHRlZCB0byBhcHBseSB0byB0aGUgb2N0YWwgYmFzZS4gIFRoZSBzdGFuZGFyZCBpcyBub3QgY2xlYXIgb24gaG93IAp0byBmb3JtYXQgKG9yIHBhcnNlKSBpbiB0aGlzIG1hbm5lci4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJbnNlcnQgaW50byAyMi4yLjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtcHVuY3QudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bXB1bmN0LnZpcnR1YWxzXTwvYT4gcGFyYWdyYXBoIDMsIGp1c3QgYmVmb3JlIHRoZSBsYXN0CnNlbnRlbmNlOgo8L3A+CjxibG9ja3F1b3RlPgpUaGUgbGVhZGluZyBoZXhhZGVjaW1hbCBiYXNlIHNwZWNpZmllciAiMHgiIGRvZXMgbm90IHBhcnRpY2lwYXRlIGluIApncm91cGluZy4gIFRoZSBsZWFkaW5nICcwJyBvY3RhbCBiYXNlIHNwZWNpZmllciBtYXkgcGFydGljaXBhdGUgaW4gCmdyb3VwaW5nLiAgSXQgaXMgdW5zcGVjaWZpZWQgaWYgdGhlIGxlYWRpbmcgJzAnIHBhcnRpY2lwYXRlcyBpbiAKZm9ybWF0dGluZyBvY3RhbCBudW1iZXJzLiAgSW4gcGFyc2luZyBvY3RhbCBudW1iZXJzLCB0aGUgaW1wbGVtZW50YXRpb24gCmlzIGVuY291cmFnZWQgdG8gYWNjZXB0IGJvdGggdGhlIGxlYWRpbmcgJzAnIHBhcnRpY2lwYXRpbmcgaW4gdGhlIApncm91cGluZywgYW5kIG5vdCBwYXJ0aWNpcGF0aW5nIChlLmcuIDAxMjMsNDU2IG9yIDAsMTIzLDQ1NikuCjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpUaGUgY3VycmVudCBiZWhhdmlvciBtYXkgYmUgdW5zcGVjaWZpZWQsIGJ1dCBpdCdzIG5vdCBjbGVhciB0aGF0IGl0Cm1hdHRlcnMuICBUaGlzIGlzIGFuIG9ic2N1cmUgY29ybmVyIGNhc2UsIHNpbmNlIGdyb3VwaW5nIGlzIHVzdWFsbHkKaW50ZW5kZWQgZm9yIHRoZSBiZW5lZml0IG9mIGh1bWFucyBhbmQgb2N0L2hleCBwcmVmaXhlcyBhcmUgdXN1YWxseQppbnRlbmRlZCBmb3IgdGhlIGJlbmVmaXQgb2YgbWFjaGluZXMuICBUaGVyZSBpcyBub3QgYSBzdHJvbmcgZW5vdWdoCmNvbnNlbnN1cyBpbiB0aGUgTFdHIGZvciBhY3Rpb24uCjwvcD4KPGhyPgo8YSBuYW1lPSIzNDgiPjwvYT48aDM+PGEgbmFtZT0iMzQ4Ij4zNDguJm5ic3A7TWlub3IgaXNzdWUgd2l0aCBzdGQ6OnBhaXIgb3BlcmF0b3ImbHQ7PC9hPjwvaDM+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjAuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5wYWlycyI+IFtsaWIucGFpcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0Z1dHVyZSI+RnV0dXJlPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZHkgU2F3eWVyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIzIE9jdCAyMDAxPC9wPgo8cD4KVGhlIGN1cnJlbnQgd29yZGluZyBvZiAyMC4yLjIgW2xpYi5wYWlyc10gcDYgcHJlY2x1ZGVzIHRoZSB1c2Ugb2YKb3BlcmF0b3ImbHQ7IG9uIGFueSBwYWlyIHR5cGUgd2hpY2ggY29udGFpbnMgYSBwb2ludGVyLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjAuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5wYWlycyI+IFtsaWIucGFpcnNdPC9hPiBwYXJhZ3JhcGggNiwgcmVwbGFjZTo8L3A+CjxwcmU+ICAgIFJldHVybnM6IHguZmlyc3QgJmx0OyB5LmZpcnN0IHx8ICghKHkuZmlyc3QgJmx0OyB4LmZpcnN0KSAmYW1wOyZhbXA7IHguc2Vjb25kICZsdDsKICAgICAgICB5LnNlY29uZCkuCjwvcHJlPgo8cD5XaXRoOjwvcD4KPHByZT4gICAgUmV0dXJuczogc3RkOjpsZXNzJmx0O1QxJmd0OygpKCB4LmZpcnN0LCB5LmZpcnN0ICkgfHwKICAgICAgICAgICAgICghc3RkOjpsZXNzJmx0O1QxJmd0OygpKCB5LmZpcnN0LCB4LmZpcnN0KSAmYW1wOyZhbXA7IAogICAgICAgICAgICAgc3RkOjpsZXNzJmx0O1QyJmd0OygpKCB4LnNlY29uZCwgeS5zZWNvbmQgKSApCjwvcHJlPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgaXMgYW4gaW5zdGFuY2Ugb2YgYSBtdWNoIG1vcmUgZ2VuZXJhbCBwcm9ibGVtLiAgSWYgd2Ugd2FudAogIG9wZXJhdG9yJmx0OyB0byB0cmFuc2xhdGUgdG8gc3RkOjpsZXNzIGZvciBwYWlycyBvZiBwb2ludGVycywgd2hlcmUKICBkbyB3ZSBkcmF3IHRoZSBsaW5lPyAgVGhlIHNhbWUgaXNzdWUgYXBwbGllcyB0byBpbmRpdmlkdWFsCiAgcG9pbnRlcnMsIHNtYXJ0IHBvaW50ZXIgd3JhcHBlcnMsIHN0ZDo6dmVjdG9yJmx0O1QqJmd0OywgYW5kIHNvCiAgb24uPC9wPgoKPHA+QW5keSBLb2VuaWcgc3VnZ2VzdHMgdGhhdCB0aGUgcmVhbCBpc3N1ZSBoZXJlIGlzIHRoYXQgd2UgYXJlbid0CiAgZGlzdGluZ3Vpc2hpbmcgYWRlcXVhdGVseSBiZXR3ZWVuIHR3byBkaWZmZXJlbnQgb3JkZXJpbmdzLCBhCiAgInVzZWZ1bCBvcmRlcmluZyIgYW5kIGEgImNhbm9uaWNhbCBvcmRlcmluZyIgdGhhdCdzIHVzZWQganVzdAogIGJlY2F1c2Ugd2Ugc29tZXRpbWVzIG5lZWQgPGk+c29tZTwvaT4gb3JkZXJpbmcgd2l0aG91dCBjYXJpbmcgbXVjaAogIHdoaWNoIG9yZGVyaW5nIGl0IGlzLiAgQW5vdGhlciBleGFtcGxlIG9mIHRoZSBsYXRlciBpcyB0eXBlaW5mbydzCiAgPHR0PmJlZm9yZTwvdHQ+LjwvcD4KCjxocj4KPGEgbmFtZT0iMzUwIj48aDM+MzUwLiZuYnNwO2FsbG9jYXRvciZsdDsmZ3Q7OjphZGRyZXNzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjAuNi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmFsbG9jYXRvci5tZW1iZXJzIj4gW2xpYi5hbGxvY2F0b3IubWVtYmVyc108L2E+LCAyMC4xLjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmFsbG9jYXRvci5yZXF1aXJlbWVudHMiPiBbbGliLmFsbG9jYXRvci5yZXF1aXJlbWVudHNdPC9hPiwgMTcuNC4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIuY29udGVudHMiPiBbbGliLmNvbnRlbnRzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNGdXR1cmUiPkZ1dHVyZTwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjUgT2N0IDIwMDE8L3A+CjxwPlNlZSBjKytzdGQtbGliLTkwMDYgYW5kIGMrK3N0ZC1saWItOTAwNy4gIFRoaXMgaXNzdWUgaXMgdGFrZW4KdmVyYmF0aW0gZnJvbSAtOTAwNy48L3A+Cgo8cD4KVGhlIGNvcmUgbGFuZ3VhZ2UgZmVhdHVyZSBhbGxvd2luZyBkZWZpbml0aW9uIG9mIG9wZXJhdG9yJmFtcDsoKSBhcHBsaWVkIAp0byBhbnkgbm9uLWJ1aWx0aW4gdHlwZSBtYWtlcyB0aGF0IG9wZXJhdG9yIG9mdGVuIHVuc2FmZSB0byB1c2UgaW4gCmltcGxlbWVudGluZyBsaWJyYXJpZXMsIGluY2x1ZGluZyB0aGUgU3RhbmRhcmQgTGlicmFyeS4gIFRoZSByZXN1bHQKaXMgdGhhdCBtYW55IGxpYnJhcnkgZmFjaWxpdGllcyBmYWlsIGZvciBsZWdhbCB1c2VyIGNvZGUsIHN1Y2ggYXMKdGhlIGZyYWdtZW50PC9wPgo8cHJlPiAgY2xhc3MgQSB7IHByaXZhdGU6IEEqIG9wZXJhdG9yJmFtcDsoKTsgfTsKICBzdGQ6OnZlY3RvciZsdDtBJmd0OyBhYTsKCiAgY2xhc3MgQiB7IH07CiAgQiogb3BlcmF0b3ImYW1wOyhCJmFtcDspIHsgcmV0dXJuIDA7IH0KICBzdGQ6OnZlY3RvciZsdDtCJmd0OyBiYTsKPC9wcmU+Cgo8cD4KSW4gcGFydGljdWxhciwgdGhlIHJlcXVpcmVtZW50cyB0YWJsZSBmb3IgQWxsb2NhdG9yIChUYWJsZSAzMikgc3BlY2lmaWVzCm5vIHNlbWFudGljcyBhdCBhbGwgZm9yIG1lbWJlciBhZGRyZXNzKCksIGFuZCBhbGxvY2F0b3ImbHQ7Jmd0Ozo6YWRkcmVzcyBpcyAKZGVmaW5lZCBpbiB0ZXJtcyBvZiB1bmFkb3JuZWQgb3BlcmF0b3IgJmFtcDsuCjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDIwLjYuMS4xLCBDaGFuZ2UgdGhlIGRlZmluaXRpb24gb2YgYWxsb2NhdG9yJmx0OyZndDs6OmFkZHJlc3MgZnJvbTo8L3A+CjxibG9ja3F1b3RlPgogIFJldHVybnM6ICZhbXA7eAo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8cD4KICBSZXR1cm5zOiBUaGUgdmFsdWUgdGhhdCB0aGUgYnVpbHQgaW4gb3BlcmF0b3ImYW1wOyh4KSB3b3VsZCByZXR1cm4gaWYgbm90IAogIG92ZXJsb2FkZWQuCjwvcD4KCjxwPgpJbiAyMC4xLjYsIFRhYmxlIDMyLCBhZGQgdG8gdGhlIE5vdGVzIGNvbHVtbiBvZiB0aGUgYS5hZGRyZXNzKHIpIGFuZAphLmFkZHJlc3MocykgbGluZXMsIHJlc3BlY3RpdmVseTogCjwvcD4KCjxwcmU+ICBhbGxvY2F0b3ImbHQ7VCZndDs6OmFkZHJlc3MocikKICBhbGxvY2F0b3ImbHQ7VCZndDs6OmFkZHJlc3MocykKPC9wcmU+IAoKPHA+SW4gYWRkaXRpb24sIGluIGNsYXVzZSAxNy40LjEuMSwgYWRkIGEgc3RhdGVtZW50OjwvcD4KCjxibG9ja3F1b3RlPiAKIFRoZSBTdGFuZGFyZCBMaWJyYXJ5IGRvZXMgbm90IGFwcGx5IG9wZXJhdG9yJmFtcDsgdG8gYW55IHR5cGUgZm9yIHdoaWNoCiBvcGVyYXRvciZhbXA7IG1heSBiZSBvdmVybG9hZGVkLgo8L2Jsb2NrcXVvdGU+IAoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgYmVsaWV2ZXMgYm90aCBleGFtcGxlcyBhcmUgaWxsLWZvcm1lZC4gIFRoZSBjb250YWluZWQgdHlwZQppcyByZXF1aXJlZCB0byBiZSBDb3B5Q29uc3RydWN0aWJsZSAoMjAuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5jb3B5Y29uc3RydWN0aWJsZSI+IFtsaWIuY29weWNvbnN0cnVjdGlibGVdPC9hPiksIGFuZCB0aGF0CmluY2x1ZGVzIHRoZSByZXF1aXJlbWVudCB0aGF0ICZhbXA7dCByZXR1cm4gdGhlIHVzdWFsIHR5cGVzIGFuZAp2YWx1ZXMuIFNpbmNlIGFsbG9jYXRvcnMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aApjb250YWluZXJzLCBhbmQgc2luY2UgdGhlIENvcHlDb25zdHJ1Y3RpYmxlIHJlcXVpcmVtZW50cyBhcHBlYXIgdG8KaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gZGVhbCB3aXRoIHRoZSBjb25jZXJucyBvZiB0aGlzIGlzc3VlLCB0aGUgTFdHCmZlZWxzIGl0IGlzIE5BRCB1bmxlc3Mgc29tZW9uZSBjYW4gY29tZSB1cCB3aXRoIGEgd2VsbC1mb3JtZWQgZXhhbXBsZQpleGhpYml0aW5nIGEgcHJvYmxlbS48L3A+Cgo8cD5JdCBtYXkgd2VsbCBiZSB0aGF0IHRoZSBDb3B5Q29uc3RydWN0aWJsZSByZXF1aXJlbWVudHMgYXJlIHRvbwogIHJlc3RyaWN0aXZlIGFuZCB0aGF0IGVpdGhlciB0aGUgY29udGFpbmVyIHJlcXVpcmVtZW50cyBvciB0aGUKICBDb3B5Q29uc3RydWN0aXZlIHJlcXVpcmVtZW50cyBzaG91bGQgYmUgcmVsYXhlZCwgYnV0IHRoYXQncyBhIGZhcgogIGxhcmdlciBpc3N1ZS4gIE1hcmtpbmcgdGhpcyBpc3N1ZSBhcyAiZnV0dXJlIiBhcyBhIHBvaW50ZXIgdG8gdGhhdAogIGxhcmdlciBpc3N1ZS48L3A+Cjxocj4KPGEgbmFtZT0iMzUxIj48aDM+MzUxLiZuYnNwO3VuYXJ5X25lZ2F0ZSBhbmQgYmluYXJ5X25lZ2F0ZTogc3RydWN0IG9yIGNsYXNzPzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLnR1cGxlIj4gW2xpYi50dXBsZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGFsZSBSaWxleSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxMiBOb3YgMjAwMTwvcD4KPHA+CkluIDIwLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLnR1cGxlIj4gW2xpYi50dXBsZV08L2E+IHRoZSBoZWFkZXIgJmx0O2Z1bmN0aW9uYWwmZ3Q7IHN5bm9wc2lzIGRlY2xhcmVzCnRoZSB1bmFyeV9uZWdhdGUgYW5kIGJpbmFyeV9uZWdhdGUgZnVuY3Rpb24gb2JqZWN0cyBhcyBzdHJ1Y3QuCkhvd2V2ZXIgaW4gPGZvbnQgY29sb3I9InJlZCI+MjAuMy41PC9mb250PiB0aGUgdW5hcnlfbmVnYXRlIGFuZCBiaW5hcnlfbmVnYXRlCmZ1bmN0aW9uIG9iamVjdHMgYXJlIGRlZmluZWQgYXMgY2xhc3MuICBHaXZlbiB0aGUgY29udGV4dCwgdGhleSBhcmUKbm90ICJiYXNpYyBmdW5jdGlvbiBvYmplY3RzIiBsaWtlIG5lZ2F0ZSwgc28gdGhpcyBpcyBlaXRoZXIgYSB0eXBvIG9yCmFuIGVkaXRvcmlhbCBvdmVyc2lnaHQuCjwvcD4KCjxwPjxpPltUYWtlbiBmcm9tIGNvbXAuc3RkLmMrK108L2k+PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgc3lub3BzaXMgdG8gcmVmbGVjdCB0aGUgdXNlYWdlIGluIDxmb250IGNvbG9yPSJyZWQiPjIwLjMuNTwvZm9udD48L3A+Cgo8cD48aT5bQ3VyYedhbzogU2luY2UgdGhlIGxhbmd1YWdlIHBlcm1pdHMgInN0cnVjdCIsIHRoZSBMV0cKdmlld3MgdGhpcyBhcyBOQUQuIFRoZXkgc3VnZ2VzdCwgaG93ZXZlciwgdGhhdCB0aGUgUHJvamVjdCBFZGl0b3IKbWlnaHQgd2lzaCB0byBtYWtlIHRoZSBjaGFuZ2UgYXMgZWRpdG9yaWFsLl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIzNTMiPjxoMz4zNTMuJm5ic3A7PHR0PnN0ZDo6cGFpcjwvdHQ+IG1pc3NpbmcgdGVtcGxhdGUgYXNzaWdubWVudDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIucGFpcnMiPiBbbGliLnBhaXJzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNGdXR1cmUiPkZ1dHVyZTwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MiBEZWMgMjAwMTwvcD4KPHA+ClRoZSBjbGFzcyB0ZW1wbGF0ZSA8dHQ+c3RkOjpwYWlyPC90dD4gZGVmaW5lcyBhIHRlbXBsYXRlIGN0b3IgKDIwLjIuMiwgcDQpIGJ1dApubyB0ZW1wbGF0ZSBhc3NpZ25tZW50IG9wZXJhdG9yLiBUaGlzIG1heSBsZWFkIHRvIGluZWZmaWNpZW50IGNvZGUgc2luY2UKYXNzaWduaW5nIGFuIG9iamVjdCBvZiA8dHQ+cGFpciZsdDtDLCBEJmd0OzwvdHQ+IHRvIDx0dD5wYWlyJmx0O0EsIEImZ3Q7PC90dD4Kd2hlcmUgdGhlIHR5cGVzIDx0dD5DPC90dD4gYW5kIDx0dD5EPC90dD4gYXJlIGRpc3RpbmN0IGZyb20gYnV0IGNvbnZlcnRpYmxlIHRvCjx0dD5BPC90dD4gYW5kIDx0dD5CPC90dD4sIHJlc3BlY3RpdmVseSwgcmVzdWx0cyBpbiBhIGNhbGwgdG8gdGhlIHRlbXBsYXRlIGNvcHkKY3RvciB0byBjb25zdHJ1Y3QgYW4gdW5uYW1lZCB0ZW1wb3Jhcnkgb2YgdHlwZSA8dHQ+cGFpciZsdDtBLCBCJmd0OzwvdHQ+CmZvbGxvd2VkIGJ5IGFuIG9yZGluYXJ5IChwZXJoYXBzIGltcGxpY2l0bHkgZGVmaW5lZCkgYXNzaWdubWVudCBvcGVyYXRvciwKaW5zdGVhZCBvZiBqdXN0IGEgc3RyYWlnaHQgYXNzaWdubWVudC4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpBZGQgdGhlIGZvbGxvd2luZyBkZWNsYXJhdGlvbiB0byB0aGUgZGVmaW5pdGlvbiBvZiA8dHQ+c3RkOjpwYWlyPC90dD46CjwvcD4KPHByZT4gICAgdGVtcGxhdGUmbHQ7Y2xhc3MgVSwgY2xhc3MgViZndDsKICAgIHBhaXImYW1wOyBvcGVyYXRvcj0oY29uc3QgcGFpciZsdDtVLCBWJmd0OyAmYW1wO3ApOwo8L3ByZT4KPHA+CkFuZCBhbHNvIGFkZCBhIHBhcmFncmFwaCBkZXNjcmliaW5nIHRoZSBlZmZlY3RzIG9mIHRoZSBmdW5jdGlvbiB0ZW1wbGF0ZSB0byB0aGUKZW5kIG9mIDIwLjIuMjoKPC9wPgo8cHJlPiAgICB0ZW1wbGF0ZSZsdDtjbGFzcyBVLCBjbGFzcyBWJmd0OwogICAgcGFpciZhbXA7IG9wZXJhdG9yPShjb25zdCBwYWlyJmx0O1UsIFYmZ3Q7ICZhbXA7cCk7CjwvcHJlPgo8cD4KICAgIDxiPkVmZmVjdHM8L2I+OiA8dHQ+Zmlyc3QgPSBwLmZpcnN0OzwvdHQ+CiAgICAgICAgICAgICAgICAgICAgPHR0PnNlY29uZCA9IHAuc2Vjb25kOzwvdHQ+CiAgICA8Yj5SZXR1cm5zPC9iPjogPHR0Pip0aGlzPC90dD4KPC9wPgoKPHA+PGk+W0N1cmHnYW86IFRoZXJlIGlzIG5vIGluZGljYXRpb24gdGhpcyBpcyB3YXMgYW55dGhpbmcgb3RoZXIgdGhhbgphIGRlc2lnbiBkZWNpc2lvbiwgYW5kIHRodXMgTkFELiZuYnNwOyBNYXkgYmUgYXBwcm9wcmlhdGUgZm9yIGEgZnV0dXJlCnN0YW5kYXJkLl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIzNTYiPjxoMz4zNTYuJm5ic3A7TWVhbmluZyBvZiBjdHlwZV9iYXNlOjptYXNrIGVudW1lcmF0b3JzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuY2F0ZWdvcnkuY3R5cGUiPiBbbGliLmNhdGVnb3J5LmN0eXBlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjMgSmFuIDIwMDI8L3A+Cgo8cD5XaGF0IHNob3VsZCB0aGUgZm9sbG93aW5nIHByb2dyYW0gcHJpbnQ/PC9wPgoKPHByZT4gICNpbmNsdWRlICZsdDtsb2NhbGUmZ3Q7CiAgI2luY2x1ZGUgJmx0O2lvc3RyZWFtJmd0OwoKICBjbGFzcyBteV9jdHlwZSA6IHB1YmxpYyBzdGQ6OmN0eXBlJmx0O2NoYXImZ3Q7CiAgewogICAgdHlwZWRlZiBzdGQ6OmN0eXBlJmx0O2NoYXImZ3Q7IGJhc2U7CiAgcHVibGljOgogICAgbXlfY3R5cGUoc3RkOjpzaXplX3QgcmVmcyA9IDApIDogYmFzZShteV90YWJsZSwgZmFsc2UsIHJlZnMpCiAgICB7CiAgICAgIHN0ZDo6Y29weShiYXNlOjpjbGFzc2ljX3RhYmxlKCksIGJhc2U6OmNsYXNzaWNfdGFibGUoKSArIGJhc2U6OnRhYmxlX3NpemUsCiAgICAgICAgICAgICAgICBteV90YWJsZSk7CiAgICAgIG15X3RhYmxlWyh1bnNpZ25lZCBjaGFyKSAnXyddID0gKGJhc2U6Om1hc2spIChiYXNlOjpwcmludCB8IGJhc2U6OnNwYWNlKTsKICAgIH0KICBwcml2YXRlOgogICAgbWFzayBteV90YWJsZVtiYXNlOjp0YWJsZV9zaXplXTsKICB9OwoKICBpbnQgbWFpbigpCiAgewogICAgbXlfY3R5cGUgY3Q7CiAgICBzdGQ6OmNvdXQgJmx0OyZsdDsgImlzc3BhY2U6ICIgJmx0OyZsdDsgY3QuaXMoc3RkOjpjdHlwZV9iYXNlOjpzcGFjZSwgJ18nKSAmbHQ7Jmx0OyAiICAgICIKICAgICAgICAgICAgICAmbHQ7Jmx0OyAiaXNhbHBoYTogIiAmbHQ7Jmx0OyBjdC5pcyhzdGQ6OmN0eXBlX2Jhc2U6OmFscGhhLCAnXycpICZsdDsmbHQ7IHN0ZDo6ZW5kbDsKICB9CjwvcHJlPgoKPHA+VGhlIGdvYWwgaXMgdG8gY3JlYXRlIGEgZmFjZXQgd2hlcmUgJ18nIGlzIHRyZWF0ZWQgYXMgd2hpdGVzcGFjZS48L3A+Cgo8cD5PbiBnY2MgMy4wLCB0aGlzIHByb2dyYW0gcHJpbnRzICJpc3NwYWNlOiAxIGlzYWxwaGE6IDAiLiAgT24KTWljcm9zb2Z0IEMrKyBpdCBwcmludHMgImlzc3BhY2U6IDEgaXNhbHBoYTogMSIuPC9wPgoKPHA+CkkgYmVsaWV2ZSB0aGF0IGJvdGggaW1wbGVtZW50YXRpb25zIGFyZSBsZWdhbCwgYW5kIHRoZSBzdGFuZGFyZCBkb2VzIG5vdApnaXZlIGVub3VnaCBndWlkYW5jZSBmb3IgdXNlcnMgdG8gYmUgYWJsZSB0byB1c2Ugc3RkOjpjdHlwZSdzCnByb3RlY3RlZCBpbnRlcmZhY2UgcG9ydGFibHkuPC9wPgoKPHA+ClRoZSBhYm92ZSBwcm9ncmFtIGFzc3VtZXMgdGhhdCBjdHlwZV9iYXNlOjptYXNrIGVudW1lcmF0b3JzIGxpa2UKPHR0PnNwYWNlPC90dD4gYW5kIDx0dD5wcmludDwvdHQ+IGFyZSBkaXNqb2ludCwgYW5kIHRoYXQgdGhlIHdheSB0bwpzYXkgdGhhdCBhIGNoYXJhY3RlciBpcyBib3RoIGEgc3BhY2UgYW5kIGEgcHJpbnRpbmcgY2hhcmFjdGVyIGlzIHRvIG9yCnRob3NlIHR3byBlbnVtZXJhdG9ycyB0b2dldGhlci4gIFRoaXMgaXMgc3VnZ2VzdGVkIGJ5IHRoZSAiZXhwb3NpdGlvbgpvbmx5IiB2YWx1ZXMgaW4gMjIuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuY2F0ZWdvcnkuY3R5cGUiPiBbbGliLmNhdGVnb3J5LmN0eXBlXTwvYT4sIGJ1dCBpdCBpcyBub3doZXJlIHNwZWNpZmllZCBpbgpub3JtYXRpdmUgdGV4dC4gIEFuIGFsdGVybmF0aXZlIGludGVycHJldGF0aW9uIGlzIHRoYXQgdGhlIG1vcmUKc3BlY2lmaWMgY2F0ZWdvcmllcyBzdWJzdW1lIHRoZSBsZXNzIHNwZWNpZmljLiAgVGhlIGFib3ZlIHByb2dyYW0KZ2l2ZXMgdGhlIHJlc3VsdHMgaXQgZG9lcyBvbiB0aGUgTWljcm9zb2Z0IGNvbXBpbGVyIGJlY2F1c2UsIG9uIHRoYXQKY29tcGlsZXIsIDx0dD5wcmludDwvdHQ+IGhhcyBhbGwgdGhlIGJpdHMgc2V0IGZvciBlYWNoIHNwZWNpZmljCnByaW50aW5nIGNoYXJhY3RlciBjbGFzcy4KPC9wPgoKPHA+RnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiBzdGQ6OmN0eXBlJ3MgcHVibGljIGludGVyZmFjZSwgdGhlcmUncyBubwppbXBvcnRhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZXNlIHR3byB0ZWNobmlxdWVzLiAgRnJvbSB0aGUgcG9pbnQgb2YKdmlldyBvZiB0aGUgcHJvdGVjdGVkIGludGVyZmFjZSwgdGhlcmUgaXMuICBJZiBJJ20gZGVmaW5pbmcgYSBmYWNldAp0aGF0IGluaGVyaXRzIGZyb20gc3RkOjpjdHlwZSZsdDtjaGFyJmd0OywgSSdtIHRoZSBvbmUgd2hvIGRlZmluZXMgdGhlCnZhbHVlIHRoYXQgdGFibGUoKVsnYSddIHJldHVybnMuICBJIG5lZWQgdG8ga25vdyB3aGF0IGNvbWJpbmF0aW9uIG9mCm1hc2sgdmFsdWVzIEkgc2hvdWxkIHVzZS4gIFRoaXMgaXNuJ3Qgc28gdmVyeSBlc290ZXJpYzogaXQncyBleGFjdGx5CndoeSBzdGQ6OmN0eXBlIGhhcyBhIHByb3RlY3RlZCBpbnRlcmZhY2UuICBJZiB3ZSBjYXJlIGFib3V0IHVzZXJzCmJlaW5nIGFibGUgdG8gd3JpdGUgdGhlaXIgb3duIGN0eXBlIGZhY2V0cywgd2UgaGF2ZSB0byBnaXZlIHRoZW0gYQpwb3J0YWJsZSB3YXkgdG8gZG8gaXQuCjwvcD4KCjxwPgpSZWxhdGVkIHJlZmxlY3RvciBtZXNzYWdlczoKbGliLTkyMjQsIGxpYi05MjI2LCBsaWItOTIyOSwgbGliLTkyNzAsIGxpYi05MjcyLCBsaWItOTI3MywgbGliLTkyNzQsCmxpYi05Mjc3LCBsaWItOTI3OS4KPC9wPgoKPHA+SXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMzOSI+MzM5PC9hPiBpcyByZWxhdGVkLCBidXQgbm90IGlkZW50aWNhbC4gIFRoZQpwcm9wb3NlZCByZXNvbHV0aW9uIGlmIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMzkiPjMzOTwvYT4gc2F5cyB0aGF0CmN0eXBlX2Jhc2U6Om1hc2sgbXVzdCBiZSBhIGJpdG1hc2sgdHlwZS4gSXQgZG9lcyBub3Qgc2F5IHRoYXQgdGhlCmN0eXBlX2Jhc2U6Om1hc2sgZWxlbWVudHMgYXJlIGJpdG1hc2sgZWxlbWVudHMsIHNvIGl0IGRvZXNuJ3QKZGlyZWN0bHkgYWZmZWN0IHRoaXMgaXNzdWUuPC9wPgoKPHA+TW9yZSBjb21tZW50cyBmcm9tIEJlbmphbWluIEtvc25paywgd2hvIGJlbGlldmVzIHRoYXQgCnRoYXQgQzk5IGNvbXBhdGliaWxpdHkgZXNzZW50aWFsbHkgcmVxdWlyZXMgd2hhdCB3ZSdyZQpjYWxsaW5nIG9wdGlvbiAxIGJlbG93LjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPkkgdGhpbmsgdGhlIEM5OSBzdGFuZGFyZCBpcyBjbGVhciwgdGhhdCBpc3NwYWNlIC0mZ3Q7ICFpc2FscGhhLgotLS0tLS0tLQoKI2luY2x1ZGUgJmx0O2xvY2FsZSZndDsKI2luY2x1ZGUgJmx0O2lvc3RyZWFtJmd0OwoKY2xhc3MgbXlfY3R5cGUgOiBwdWJsaWMgc3RkOjpjdHlwZSZsdDtjaGFyJmd0Owp7CnByaXZhdGU6CiAgdHlwZWRlZiBzdGQ6OmN0eXBlJmx0O2NoYXImZ3Q7IGJhc2U7CiAgbWFzayBteV90YWJsZVtiYXNlOjp0YWJsZV9zaXplXTsKCnB1YmxpYzoKICBteV9jdHlwZShzdGQ6OnNpemVfdCByZWZzID0gMCkgOiBiYXNlKG15X3RhYmxlLCBmYWxzZSwgcmVmcykKICB7CiAgICBzdGQ6OmNvcHkoYmFzZTo6Y2xhc3NpY190YWJsZSgpLCBiYXNlOjpjbGFzc2ljX3RhYmxlKCkgKyBiYXNlOjp0YWJsZV9zaXplLAogICAgICAgICAgICAgIG15X3RhYmxlKTsKICAgIG1hc2sgYm90aCA9IGJhc2U6OnByaW50IHwgYmFzZTo6c3BhY2U7CiAgICBteV90YWJsZVtzdGF0aWNfY2FzdCZsdDttYXNrJmd0OygnXycpXSA9IGJvdGg7CiAgfQp9OwoKaW50IG1haW4oKQp7CiAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICBteV9jdHlwZSBjdDsKICBjb3V0ICZsdDsmbHQ7ICJpc3NwYWNlOiAiICZsdDsmbHQ7IGN0LmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCAnXycpICZsdDsmbHQ7IGVuZGw7CiAgY291dCAmbHQ7Jmx0OyAiaXNwcmludDogIiAmbHQ7Jmx0OyBjdC5pcyhjdHlwZV9iYXNlOjpwcmludCwgJ18nKSAmbHQ7Jmx0OyBlbmRsOwoKICAvLyBJU08gQzk5LCBpc2FscGhhIGlmZiB1cHBlciB8IGxvd2VyIHNldCwgYW5kICFzcGFjZS4KICAvLyA3LjUsIHAgMTkzCiAgLy8gLSZndDsgbG9va3MgbGlrZSBnKysgYmVoYXZpb3IgaXMgY29ycmVjdC4KICAvLyAzNTYgLSZndDsgYml0bWFzayBlbGVtZW50cyBhcmUgcmVxdWlyZWQgZm9yIGN0eXBlX2Jhc2UKICAvLyAzMzkgLSZndDsgYml0bWFzayB0eXBlIHJlcXVpcmVkIGZvciBtYXNrCiAgY291dCAmbHQ7Jmx0OyAiaXNhbHBoYTogIiAmbHQ7Jmx0OyBjdC5pcyhjdHlwZV9iYXNlOjphbHBoYSwgJ18nKSAmbHQ7Jmx0OyBlbmRsOwp9CjwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluZm9ybWFsbHksIHdlIGhhdmUgdGhyZWUgY2hvaWNlczo8L3A+IAo8b2w+CjxsaT5SZXF1aXJlIHRoYXQgdGhlIGVudW1lcmF0b3JzIGFyZSBkaXNqb2ludCAoZXhjZXB0IGZvciBhbG51bSBhbmQKZ3JhcGgpPC9saT4KPGxpPlJlcXVpcmUgdGhhdCB0aGUgZW51bWVyYXRvcnMgYXJlIG5vdCBkaXNqb2ludCwgYW5kIHNwZWNpZnkgd2hpY2gKb2YgdGhlbSBzdWJzdW1lIHdoaWNoIG90aGVycy4gIChlLmcuIG1hbmRhdGUgdGhhdCBsb3dlciBpbmNsdWRlcyBhbHBoYQphbmQgcHJpbnQpPC9saT4KPGxpPkV4cGxpY2l0bHkgbGVhdmUgdGhpcyB1bnNwZWNpZmllZCwgd2hpY2ggdGhlIHJlc3VsdCB0aGF0IHRoZSBhYm92ZQpwcm9ncmFtIGlzIG5vdCBwb3J0YWJsZS48L2xpPgo8L29sPgoKPHA+RWl0aGVyIG9mIHRoZSBmaXJzdCB0d28gb3B0aW9ucyBpcyBqdXN0IGFzIGdvb2QgZnJvbSB0aGUgc3RhbmRwb2ludApvZiBwb3J0YWJpbGl0eS4gIEVpdGhlciBvbmUgd2lsbCByZXF1aXJlIHNvbWUgaW1wbGVtZW50YXRpb25zIHRvCmNoYW5nZS48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGFncmVlcyB0aGF0IHRoaXMgaXMgYSByZWFsIGFtYmlndWl0eSwgYW5kIHRoYXQgYm90aAppbnRlcnByZXRhdGlvbnMgYXJlIGNvbmZvcm1pbmcgdW5kZXIgdGhlIGV4aXN0aW5nIHN0YW5kYXJkLiBIb3dldmVyLAp0aGVyZSdzIG5vIGV2aWRlbmNlIHRoYXQgaXQncyBjYXVzaW5nIHByb2JsZW1zIGZvciByZWFsIHVzZXJzLiBVc2Vycwp3aG8gd2FudCB0byBkZWZpbmUgY3R5cGUgZmFjZXRzIHBvcnRhYmx5IGNhbiB0ZXN0IHRoZSBjdHlwZV9iYXNlIG1hc2tzCnRvIHNlZSB3aGljaCBpbnRlcnByZXRhdGlvbiBpcyBiZWluZyB1c2VkLjwvcD4KPGhyPgo8YSBuYW1lPSIzNTciPjxoMz4zNTcuJm5ic3A7Jmx0O2NtYXRoJmd0OyBmbG9hdCBmdW5jdGlvbnMgY2Fubm90IHJldHVybiBIVUdFX1ZBTDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI2LjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIubnVtYXJyYXkiPiBbbGliLm51bWFycmF5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtSYXkgTGlzY2huZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjYgRmViIDIwMDI8L3A+CjxwPgpUaGUgZmxvYXQgdmVyc2lvbnMgb2YgdGhlIG1hdGggZnVuY3Rpb25zIGhhdmUgbm8gbWVhbmluZ2Z1bCB2YWx1ZSB0byByZXR1cm4gCmZvciBhIHJhbmdlIGVycm9yLiBUaGUgbG9uZyBkb3VibGUgdmVyc2lvbnMgaGF2ZSBhIHZhbHVlIHRoZXkgY2FuIHJldHVybiwgCmJ1dCBpdCBpc24ndCBuZWNlc3NhcmlseSB0aGUgbW9zdCByZWFzb25hYmxlIHZhbHVlLgo8L3A+Cgo8cD4KU2VjdGlvbiAyNi41IFtsaWIuYy5tYXRoXSwgcGFyYWdyYXBoIDUsIHNheXMgdGhhdCBDKysgImFkZHMgZmxvYXQgYW5kIGxvbmcgCmRvdWJsZSBvdmVybG9hZGVkIHZlcnNpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucywgd2l0aCB0aGUgc2FtZSBzZW1hbnRpY3MsIiAKcmVmZXJyaW5nIHRvIHRoZSBtYXRoIGZ1bmN0aW9ucyBmcm9tIHRoZSBDOTAgc3RhbmRhcmQuCjwvcD4KCjxwPgpUaGUgQzkwIHN0YW5kYXJkLCBpbiBzZWN0aW9uIDcuNS4xLCBwYXJhZ3JhcGggMywgc2F5cyB0aGF0IGZ1bmN0aW9ucyByZXR1cm4gCiJ0aGUgdmFsdWUgb2YgdGhlIG1hY3JvIEhVR0VfVkFMIiB3aGVuIHRoZXkgZW5jb3VudGVyIGEgcmFuZ2UgZXJyb3IuIApTZWN0aW9uIDcuNSwgcGFyYWdyYXBoIDIsIGRlZmluZXMgSFVHRV9WQUwgYXMgYSBtYWNybyB0aGF0ICJleHBhbmRzIHRvIGEgCnBvc2l0aXZlIGRvdWJsZSBleHByZXNzaW9uLCBub3QgbmVjZXNzYXJpbHkgcmVwcmVzZW50YWJsZSBhcyBhIGZsb2F0LiIKPC9wPgoKPHA+ClRoZXJlZm9yZSwgdGhlIGZsb2F0IHZlcnNpb25zIG9mIHRoZSBtYXRoIGZ1bmN0aW9ucyBoYXZlIG5vIHdheSB0bwpzaWduYWwgYSByYW5nZSBlcnJvci4gPGk+W0N1cmHnYW86IFRoZSBMV0cgbm90ZXMgdGhhdCB0aGlzIGlzbid0CnN0cmljdGx5IGNvcnJlY3QsIHNpbmNlIGVycm5vIGlzIHNldC5dPC9pPiBUaGUgc2VtYW50aWNzIHJlcXVpcmUgdGhhdCB0aGV5CnJldHVybiBIVUdFX1ZBTCwgYnV0IHRoZXkgY2Fubm90IGJlY2F1c2UgSFVHRV9WQUwgbWlnaHQgbm90IGJlCnJlcHJlc2VudGFibGUgYXMgYSBmbG9hdC4KPC9wPgoKPHA+ClRoZSBwcm9ibGVtIHdpdGggbG9uZyBkb3VibGUgZnVuY3Rpb25zIGlzIGxlc3Mgc2V2ZXJlIGJlY2F1c2UgSFVHRV9WQUwgaXMgCnJlcHJlc2VudGFibGUgYXMgYSBsb25nIGRvdWJsZS4gT24gdGhlIG90aGVyIGhhbmQsIGl0IG1pZ2h0IG5vdCBiZSBhICJodWdlIiAKbG9uZyBkb3VibGUgdmFsdWUsIGFuZCBtaWdodCBmYWxsIHdlbGwgd2l0aGluIHRoZSByYW5nZSBvZiBub3JtYWwgcmV0dXJuIAp2YWx1ZXMgZm9yIGEgbG9uZyBkb3VibGUgZnVuY3Rpb24uIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3IgYSAKbG9uZyBkb3VibGUgZnVuY3Rpb24gdG8gcmV0dXJuIGEgZG91YmxlIChIVUdFX1ZBTCkgZm9yIGEgcmFuZ2UgZXJyb3IuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DdXJh52FvOiBDOTkgd2FzIGZhY2VkIHdpdGggYSBzaW1pbGFyIHByb2JsZW0sIHdoaWNoIHRoZXkgZml4ZWQgYnkKYWRkaW5nIEhVR0VfVkFMRiBhbmQgSFVHRV9WQUxMIGluIGFkZGl0aW9uIHRvIEhVR0VfVkFMLjwvcD4KCjxwPkMrKyBtdXN0IGFsc28gZml4LCBidXQgaXQgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIGNvbnRleHQgb2YgdGhlCmdlbmVyYWwgQzk5IGJhc2VkIGNoYW5nZXMgdG8gQysrLCBub3QgdmlhIERSLiBUaHVzIHRoZSBMV0cgaW4gQ3VyYedhbwpmZWx0IHRoZSByZXNvbHV0aW9uIHNob3VsZCBiZSBOQUQsIEZVVFVSRSwgYnV0IHRoZSBpc3N1ZSBpcyBiZWluZyBoZWxkCm9wZW4gZm9yIG9uZSBtb3JlIG1lZXRpbmcgdG8gZW5zdXJlIExXRyBtZW1iZXJzIG5vdCBwcmVzZW50IGR1cmluZyB0aGUKZGlzY3Vzc2lvbiBjb25jdXIuPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+V2lsbCBiZSBmaXhlZCBhcyBwYXJ0IG9mIG1vcmUgZ2VuZXJhbCB3b3JrIGluIHRoZSBUUi48L3A+Cjxocj4KPGEgbmFtZT0iMzYxIj48aDM+MzYxLiZuYnNwO251bV9nZXQmbHQ7Jmd0Ozo6ZG9fZ2V0ICguLi4sIHZvaWQqJmFtcDspIGNoZWNrcyBncm91cGluZzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMi4yLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0ucHV0LnZpcnR1YWxzIj4gW2xpYi5mYWNldC5udW0ucHV0LnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTIgTWFyIDIwMDI8L3A+CjxwPgoyMi4yLjIuMi4yLCBwMTIgc3BlY2lmaWVzIHRoYXQgPHR0PnRob3VzYW5kc19zZXA8L3R0PiBpcyB0byBiZSBpbnNlcnRlZCBvbmx5CmZvciBpbnRlZ3JhbCB0eXBlcyAoaXNzdWUgMjgyIHN1Z2dlc3RzIHRoYXQgdGhpcyBzaG91bGQgYmUgZG9uZSBmb3IKYWxsIGFyaXRobWV0aWMgdHlwZXMpLgo8L3A+Cgo8cD4KMjIuMi4yLjEuMiwgcDEyIHJlcXVpcmVzIHRoYXQgZ3JvdXBpbmcgYmUgY2hlY2tlZCBmb3IgYWxsIGV4dHJhY3RvcnMKaW5jbHVkaW5nIHRoYXQgZm9yIDx0dD52b2lkKjwvdHQ+Lgo8L3A+Cgo8cD4KSSBkb24ndCB0aGluayB0aGF0J3MgcmlnaHQuIDx0dD52b2lkKjwvdHQ+IHZhbHVlcyBzaG91bGQgbm90IGJlIGNoZWNrZWQgZm9yCmdyb3VwaW5nLCBzaG91bGQgdGhleT8gKEFsdGhvdWdoIGlmIHRoZXkgc2hvdWxkLCB0aGVuIDx0dD5udW1fcHV0PC90dD4gbmVlZHMKdG8gd3JpdGUgdGhlbSBvdXQsIG90aGVyd2lzZSB0aGVpciBleHRyYWN0aW9uIHdpbGwgZmFpbC4pCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiAyMi4yLjIuMi4yLCBwMTIgZnJvbQo8L3A+CjxibG9ja3F1b3RlPgogICAgRGlnaXQgZ3JvdXBpbmcgaXMgY2hlY2tlZC4gVGhhdCBpcywgdGhlIHBvc2l0aW9ucyBvZiBkaXNjYXJkZWQKICAgIHNlcGFyYXRvcnMgaXMgZXhhbWluZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGgKICAgIHVzZV9mYWNldCZsdDtudW1wdW5jdCZsdDtjaGFyVCZndDsgJmd0Oyhsb2MpLmdyb3VwaW5nKCkuCiAgICBJZiB0aGV5IGFyZSBub3QgY29uc2lzdGVudCB0aGVuIGlvc19iYXNlOjpmYWlsYml0IGlzIGFzc2lnbmVkCiAgICB0byBlcnIuCjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgo8YmxvY2txdW90ZT4KICAgIEV4Y2VwdCBmb3IgY29udmVyc2lvbnMgdG8gdm9pZCosIGRpZ2l0IGdyb3VwaW5nIGlzIGNoZWNrZWQuLi4KPC9ibG9ja3F1b3RlPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgd291bGQgYmUgYSBjaGFuZ2U6IGFzIGl0IHN0YW5kcywgdGhlIHN0YW5kYXJkIGNsZWFybHkKICBzcGVjaWZpZXMgdGhhdCBncm91cGluZyBhcHBsaWVzIHRvIHZvaWQqLiAgQSBzdXJ2ZXkgb2YgZXhpc3RpbmcKICBwcmFjdGljZSBzaG93cyB0aGF0IG1vc3QgZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zIGRvIHRoYXQsIGFzIHRoZXkKICBzaG91bGQuPC9wPgo8aHI+CjxhIG5hbWU9IjM2NiI+PGgzPjM2Ni4mbmJzcDtFeGNlc3NpdmUgY29uc3QtcXVhbGlmaWNhdGlvbjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pbnB1dC5vdXRwdXQiPiBbbGliLmlucHV0Lm91dHB1dF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7V2FsdGVyIEJyb3duLCBNYXJjIFBhdGVybm8mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTAgTWF5IDIwMDI8L3A+CjxwPgpUaGUgZm9sbG93aW5nIG1lbWJlciBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGNvbnN0LCB5ZXQgcmV0dXJuIG5vbi1jb25zdApwb2ludGVycy4gV2UgYmVsaWV2ZSB0aGV5IGFyZSBzaG91bGQgYmUgY2hhbmdlZCwgYmVjYXVzZSB0aGV5IGFsbG93IGNvZGUKdGhhdCBtYXkgc3VycHJpc2UgdGhlIHVzZXIuIFNlZSBkb2N1bWVudCBOMTM2MCBmb3IgZGV0YWlscyBhbmQKcmF0aW9uYWxlLgo8L3A+Cgo8cD48aT5bU2FudGEgQ3J1ejogdGhlIHJlYWwgaXNzdWUgaXMgdGhhdCB3ZSd2ZSBnb3QgY29uc3QgbWVtYmVyCmZ1bmN0aW9ucyB0aGF0IHJldHVybiBwb2ludGVycyB0byBub24tY29uc3QsIGFuZCBOMTM2MCBwcm9wb3NlcwpyZXBsYWNpbmcgdGhlbSBieSBvdmVybG9hZGVkIHBhaXJzLiAgVGhlcmUgaXNuJ3QgYSBjb25zZW5zdXMgYWJvdXQKd2hldGhlciB0aGlzIGlzIGEgcmVhbCBpc3N1ZSwgc2luY2Ugd2UndmUgbmV2ZXIgc2FpZCB3aGF0IG91cgpjb25zdG5lc3MgcG9saWN5IGlzIGZvciBpb3N0cmVhbXMuICBOMTM2MCByZWxpZXMgb24gYSBkaXN0aW5jdGlvbgpiZXR3ZWVuIHBoeXNpY2FsIGNvbnN0bmVzcyBhbmQgbG9naWNhbCBjb25zdG5lc3M7IHRoYXQgZGlzdGluY3Rpb24sIG9yCnRob3NlIHRlcm1zLCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIHN0YW5kYXJkLl08L2k+PC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy40LjQgYW5kIDI3LjQuNC4yPC9wPgo8cD5SZXBsYWNlPC9wPgo8cHJlPiAgYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7KiB0aWUoKSBjb25zdDsKPC9wcmU+CjxwPndpdGg8L3A+CjxwcmU+ICBiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsqIHRpZSgpOwogIGNvbnN0IGJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyogdGllKCkgY29uc3Q7CjwvcHJlPgoKPHA+YW5kIHJlcGxhY2U8L3A+CjxwcmU+ICBiYXNpY19zdHJlYW1idWYmbHQ7Y2hhclQsdHJhaXRzJmd0OyogcmRidWYoKSBjb25zdDsKPC9wcmU+CjxwPndpdGg8L3A+CjxwcmU+ICBiYXNpY19zdHJlYW1idWYmbHQ7Y2hhclQsdHJhaXRzJmd0OyogcmRidWYoKTsKICBjb25zdCBiYXNpY19zdHJlYW1idWYmbHQ7Y2hhclQsdHJhaXRzJmd0OyogcmRidWYoKSBjb25zdDsKPC9wcmU+Cgo8cD5JbiAyNy41LjIgYW5kIDI3LjUuMi4zLjE8L3A+CjxwPlJlcGxhY2U8L3A+CjxwcmU+ICBjaGFyX3R5cGUqIGViYWNrKCkgY29uc3Q7CjwvcHJlPgo8cD53aXRoPC9wPgo8cHJlPiAgY2hhcl90eXBlKiBlYmFjaygpOwogIGNvbnN0IGNoYXJfdHlwZSogZWJhY2soKSBjb25zdDsKPC9wcmU+Cgo8cD5SZXBsYWNlPC9wPgo8cHJlPiAgY2hhcl90eXBlIGdwdHIoKSBjb25zdDsKPC9wcmU+CjxwPndpdGg8L3A+CjxwcmU+ICBjaGFyX3R5cGUqIGdwdHIoKTsKICBjb25zdCBjaGFyX3R5cGUqIGdwdHIoKSBjb25zdDsKPC9wcmU+Cgo8cD5SZXBsYWNlPC9wPgo8cHJlPiAgY2hhcl90eXBlKiBlZ3B0cigpIGNvbnN0Owo8L3ByZT4KPHA+d2l0aDwvcD4KPHByZT4gIGNoYXJfdHlwZSogZWdwdHIoKTsKICBjb25zdCBjaGFyX3R5cGUqIGVncHRyKCkgY29uc3Q7CjwvcHJlPgoKPHA+SW4gMjcuNS4yIGFuZCAyNy41LjIuMy4yPC9wPgo8cD5SZXBsYWNlPC9wPgo8cHJlPiAgY2hhcl90eXBlKiBwYmFzZSgpIGNvbnN0Owo8L3ByZT4KPHA+d2l0aDwvcD4KPHByZT4gIGNoYXJfdHlwZSogcGJhc2UoKTsKICBjb25zdCBjaGFyX3R5cGUqIHBiYXNlKCkgY29uc3Q7CjwvcHJlPgoKPHA+UmVwbGFjZTwvcD4KPHByZT4gIGNoYXJfdHlwZSogcHB0cigpIGNvbnN0Owo8L3ByZT4KPHA+d2l0aDwvcD4KPHByZT4gIGNoYXJfdHlwZSogcHB0cigpOwogIGNvbnN0IGNoYXJfdHlwZSogcHB0cigpIGNvbnN0Owo8L3ByZT4KCjxwPlJlcGxhY2U8L3A+CjxwcmU+ICBjaGFyX3R5cGUqIGVwcHRyKCkgY29uc3Q7CjwvcHJlPgo8cD53aXRoPC9wPgo8cHJlPiAgY2hhcl90eXBlKiBlcHB0cigpOwogIGNvbnN0IGNoYXJfdHlwZSogZXBwdHIoKSBjb25zdDsKPC9wcmU+Cgo8cD5JbiAyNy43LjIsIDI3LjcuMi4yLCAyNy43LjMgMjcuNy4zLjIsIDI3LjcuNCwgYW5kIDI3LjcuNjwvcD4KPHA+UmVwbGFjZTwvcD4KPHByZT4gIGJhc2ljX3N0cmluZ2J1ZiZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OyogcmRidWYoKSBjb25zdDsKPC9wcmU+CjxwPndpdGg8L3A+CjxwcmU+ICBiYXNpY19zdHJpbmdidWYmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsqIHJkYnVmKCk7CiAgY29uc3QgYmFzaWNfc3RyaW5nYnVmJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7KiByZGJ1ZigpIGNvbnN0Owo8L3ByZT4KCjxwPkluICAyNy44LjEuNSwgMjcuOC4xLjcsIDI3LjguMS44LCAyNy44LjEuMTAsIDI3LjguMS4xMSwgYW5kIDI3LjguMS4xMzwvcD4KPHA+UmVwbGFjZTwvcD4KPHByZT4gIGJhc2ljX2ZpbGVidWYmbHQ7Y2hhclQsdHJhaXRzJmd0OyogcmRidWYoKSBjb25zdDsKPC9wcmU+CjxwPndpdGg8L3A+CjxwcmU+ICBiYXNpY19maWxlYnVmJmx0O2NoYXJULHRyYWl0cyZndDsqIHJkYnVmKCk7CiAgY29uc3QgYmFzaWNfZmlsZWJ1ZiZsdDtjaGFyVCx0cmFpdHMmZ3Q7KiByZGJ1ZigpIGNvbnN0Owo8L3ByZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBleGlzdGluZyBzcGVjaWZpY2F0aW9uIGlzIGEgYml0IHNsb3BweSwgYnV0IHRoZXJlJ3Mgbm8KICBwYXJ0aWN1bGFyIHJlYXNvbiB0byBjaGFuZ2UgdGhpcyBvdGhlciB0aGFuIHRpZGluZXNzLCBhbmQgdGhlcmUgYXJlCiAgYSBudW1iZXIgb2Ygd2F5cyBpbiB3aGljaCBzdHJlYW1zIG1pZ2h0IGhhdmUgYmVlbiBkZXNpZ25lZAogIGRpZmZlcmVudGx5IGlmIHdlIHdlcmUgc3RhcnRpbmcgdG9kYXkuICBUaGVyZSdzIG5vIGV2aWRlbmNlIHRoYXQgdGhlCiAgZXhpc3RpbmcgY29uc3RuZXNzIHBvbGljeSBpcyBoYXJtaW5nIHVzZXJzLiAgV2UgbWlnaHQgY29uc2lkZXIKICBhIGRpZmZlcmVudCBjb25zdG5lc3MgcG9saWN5IGFzIHBhcnQgb2YgYSBmdWxsIHN0cmVhbSByZWRlc2lnbi48L3A+Cjxocj4KPGEgbmFtZT0iMzY3Ij48aDM+MzY3LiZuYnNwO3JlbW92ZV9jb3B5L3JlbW92ZV9jb3B5X2lmIGFuZCBJbnB1dCBJdGVyYXRvcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNS4yLjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcucmVtb3ZlIj4gW2xpYi5hbGcucmVtb3ZlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbnRob255IFdpbGxpYW1zJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEzIE1heSAyMDAyPC9wPgo8cD4KcmVtb3ZlX2NvcHkgYW5kIHJlbW92ZV9jb3B5X2lmICgyNS4yLjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcucmVtb3ZlIj4gW2xpYi5hbGcucmVtb3ZlXTwvYT4pIHBlcm1pdCB0aGVpcgppbnB1dCByYW5nZSB0byBiZSBtYXJrZWQgd2l0aCBJbnB1dCBJdGVyYXRvcnMuIEhvd2V2ZXIsIHNpbmNlIHR3bwpvcGVyYXRpb25zIGFyZSByZXF1aXJlZCBhZ2FpbnN0IHRoZSBlbGVtZW50cyB0byBjb3B5IChjb21wYXJpc29uIGFuZAphc3NpZ21lbnQpLCB3aGVuIHRoZSBpbnB1dCByYW5nZSB1c2VzIElucHV0IEl0ZXJhdG9ycywgYSB0ZW1wb3JhcnkKY29weSBtdXN0IGJlIHRha2VuIHRvIGF2b2lkIGRlcmVmZXJlbmNpbmcgdGhlIGl0ZXJhdG9yIHR3aWNlLiBUaGlzCnRoZXJlZm9yZSByZXF1aXJlcyB0aGUgdmFsdWUgdHlwZSBvZiB0aGUgSW5wdXRJdGVyYXRvciB0byBiZQpDb3B5Q29uc3RydWN0aWJsZS4gSWYgdGhlIGl0ZXJhdG9ycyBhcmUgYXQgbGVhc3QgRm9yd2FyZCBJdGVyYXRvcnMsCnRoZW4gdGhlIGl0ZXJhdG9yIGNhbiBiZSBkZXJlZmVyZW5jZWQgdHdpY2UsIG9yIGEgcmVmZXJlbmNlIHRvIHRoZQpyZXN1bHQgbWFpbnRhaW5lZCwgc28gdGhlIHRlbXBvcmFyeSBpcyBub3QgcmVxdWlyZWQuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkICJJZiBJbnB1dEl0ZXJhdG9yIGRvZXMgbm90IG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiBmb3J3YXJkCml0ZXJhdG9yLCB0aGVuIHRoZSB2YWx1ZSB0eXBlIG9mIElucHV0SXRlcmF0b3IgbXVzdCBiZSBjb3B5CmNvbnN0cnVjdGlibGUuIE90aGVyd2lzZSBjb3B5IGNvbnN0cnVjdGlibGUgaXMgbm90IHJlcXVpcmVkLiIgdG8KMjUuMi43IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLnJlbW92ZSI+IFtsaWIuYWxnLnJlbW92ZV08L2E+IHBhcmFncmFwaCA2Lgo8L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgYXNzdW1wdGlvbiBpcyB0aGF0IGFuIGlucHV0IGl0ZXJhdG9yIGNhbid0IGJlIGRlcmVmZXJlbmNlZAogIHR3aWNlLiAgVGhlcmUncyBubyBiYXNpcyBmb3IgdGhhdCBhc3N1bXB0aW9uIGluIHRoZSBTdGFuZGFyZC48L3A+Cjxocj4KPGEgbmFtZT0iMzY4Ij48aDM+MzY4LiZuYnNwO2Jhc2ljX3N0cmluZzo6cmVwbGFjZSBoYXMgdHdvICJUaHJvd3MiIHBhcmFncmFwaHM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4zLjUuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZzo6cmVwbGFjZSI+IFtsaWIuc3RyaW5nOjpyZXBsYWNlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtCZW1hbiBEYXdlcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIEp1biAyMDAyPC9wPgo8cD4KMjEuMy41LjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmc6OnJlcGxhY2UiPiBbbGliLnN0cmluZzo6cmVwbGFjZV08L2E+IGJhc2ljX3N0cmluZzo6cmVwbGFjZSwgc2Vjb25kCnNpZ25hdHVyZSwgZ2l2ZW4gaW4gcGFyYWdyYXBoIDEsIGhhcyB0d28gIlRocm93cyIgcGFyYWdyYXBocyAoMyBhbmQKNSkuCjwvcD4KCjxwPgpJbiBhZGRpdGlvbiwgdGhlIHNlY29uZCAiVGhyb3dzIiBwYXJhZ3JhcGggKDUpIGluY2x1ZGVzIHNwZWNpZmljYXRpb24KKGJlZ2lubmluZyB3aXRoICJPdGhlcndpc2UsIHRoZSBmdW5jdGlvbiByZXBsYWNlcyAuLi4iKSB0aGF0IHNob3VsZCBiZQpwYXJ0IG9mIHRoZSAiRWZmZWN0cyIgcGFyYWdyYXBoLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgaXMgZWRpdG9yaWFsLiBCb3RoICJ0aHJvd3MiIHN0YXRlbWVudHMgYXJlIHRydWUuIFRoZSBidWcgaXMKICBqdXN0IHRoYXQgdGhlIHNlY29uZCBvbmUgc2hvdWxkIGJlIGEgc2VudGVuY2UsIHBhcnQgb2YgdGhlICJFZmZlY3RzIgogIGNsYXVzZSwgbm90IGEgc2VwYXJhdGUgIlRocm93cyIuICBUaGUgcHJvamVjdCBlZGl0b3IgaGFzIGJlZW4KICBub3RpZmllZC48L3A+Cjxocj4KPGEgbmFtZT0iMzcyIj48aDM+MzcyLiZuYnNwO0luY29uc2lzdGVudCBkZXNjcmlwdGlvbiBvZiBzdGRsaWIgZXhjZXB0aW9uczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE3LjQuNC44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnJlcy5vbi5leGNlcHRpb24uaGFuZGxpbmciPiBbbGliLnJlcy5vbi5leGNlcHRpb24uaGFuZGxpbmddPC9hPiwgMTguNi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIudHlwZS5pbmZvIj4gW2xpYi50eXBlLmluZm9dPC9hPiwgJm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7UmFuZHkgTWFkZG94Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIyIEp1bCAyMDAyPC9wPgoKPHA+UGFyYWdyYXBoIDMgdW5kZXIgY2xhdXNlIDE3LjQuNC44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnJlcy5vbi5leGNlcHRpb24uaGFuZGxpbmciPiBbbGliLnJlcy5vbi5leGNlcHRpb24uaGFuZGxpbmddPC9hPiwgUmVzdHJpY3Rpb25zIG9uCkV4Y2VwdGlvbiBIYW5kbGluZywgc3RhdGVzIHRoYXQgIkFueSBvdGhlciBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUKQysrIFN0YW5kYXJkIExpYnJhcnkgdGhhdCBkbyBub3QgaGF2ZSBhbiBleGNlcHRpb24tc3BlY2lmaWNhdGlvbiBtYXkKdGhyb3cgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBleGNlcHRpb25zIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLiIKVGhpcyBzdGF0ZW1lbnQgaXMgZm9sbG93ZWQgYnkgYSByZWZlcmVuY2UgdG8gZm9vdG5vdGUgMTc4IGF0IHRoZQpib3R0b20gb2YgdGhhdCBwYWdlIHdoaWNoIHN0YXRlcywgYXBwYXJlbnRseSBpbiByZWZlcmVuY2UgdG8gdGhlIEMrKwpTdGFuZGFyZCBMaWJyYXJ5LCB0aGF0ICJMaWJyYXJ5IGltcGxlbWVudGF0aW9ucyBhcmUgZW5jb3VyYWdlZCAoYnV0Cm5vdCByZXF1aXJlZCkgdG8gcmVwb3J0IGVycm9ycyBieSB0aHJvd2luZyBleGNlcHRpb25zIGZyb20gKG9yIGRlcml2ZWQKZnJvbSkgdGhlIHN0YW5kYXJkIGV4Y2VwdGlvbnMuIjwvcD4KCjxwPlRoZXNlIHN0YXRlbWVudHMgYXBwZWFyIHRvIGJlIGluIGRpcmVjdCBjb250cmFkaWN0aW9uIHRvIGNsYXVzZQoxOC42LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi50eXBlLmluZm8iPiBbbGliLnR5cGUuaW5mb108L2E+LCB3aGljaCBzdGF0ZXMgIlRoZSBjbGFzcyBleGNlcHRpb24gZGVmaW5lcyB0aGUKYmFzZSBjbGFzcyBmb3IgdGhlIHR5cGVzIG9mIG9iamVjdHMgdGhyb3duIGFzIGV4Y2VwdGlvbnMgYnkgdGhlIEMrKwpTdGFuZGFyZCBsaWJyYXJ5IGNvbXBvbmVudHMgLi4uIi48L3A+Cgo8cD5JcyB0aGlzIGluY29uc2lzdGVudD88L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5DbGF1c2UgMTcgaXMgc2V0dGluZyB0aGUgb3ZlcmFsbCBsaWJyYXJ5IHJlcXVpcmVtZW50cywgYW5kIGl0J3MKICBjbGVhciBhbmQgY29uc2lzdGVudC4gIFRoaXMgc2VudGVuY2UgZnJvbSBDbGF1c2UgMTggaXMgZGVzY3JpcHRpdmUsCiAgbm90IHNldHRpbmcgYSByZXF1aXJlbWVudCBvbiBhbnkgb3RoZXIgY2xhc3MuCjwvcD4KPGhyPgo8YSBuYW1lPSIzNzQiPjxoMz4zNzQuJm5ic3A7bW9uZXlwdW5jdDo6ZnJhY19kaWdpdHMgcmV0dXJucyBpbnQgbm90IHVuc2lnbmVkPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi42LjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5tb25leXB1bmN0Lm1lbWJlcnMiPiBbbGliLmxvY2FsZS5tb25leXB1bmN0Lm1lbWJlcnNdPC9hPiwgMjIuMi42LjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5tb25leXB1bmN0LnZpcnR1YWxzIj4gW2xpYi5sb2NhbGUubW9uZXlwdW5jdC52aXJ0dWFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7UmF5IExpc2NobmVyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzggQXVnIDIwMDI8L3A+CjxwPgpJbiBzZWN0aW9uIDIyLjIuNi4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubW9uZXlwdW5jdC5tZW1iZXJzIj4gW2xpYi5sb2NhbGUubW9uZXlwdW5jdC5tZW1iZXJzXTwvYT4sIGZyYWNfZGlnaXRzKCkgcmV0dXJucyB0eXBlCiJpbnQiLiBUaGlzIGltcGxpZXMgdGhhdCBmcmFjX2RpZ2l0cygpIG1pZ2h0IHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlLApidXQgYSBuZWdhdGl2ZSB2YWx1ZSBpcyBub25zZW5zaWNhbC4gSXQgc2hvdWxkIHJldHVybiAidW5zaWduZWQiLgo8L3A+Cgo8cD4KU2ltaWxhcmx5LCBpbiBzZWN0aW9uIDIyLjIuNi4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubW9uZXlwdW5jdC52aXJ0dWFscyI+IFtsaWIubG9jYWxlLm1vbmV5cHVuY3QudmlydHVhbHNdPC9hPiwgZG9fZnJhY19kaWdpdHMoKQpzaG91bGQgcmV0dXJuICJ1bnNpZ25lZCIuCjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcmV0dXJuIHZhbHVlIGlzIGludCBvciB1bnNpZ25lZCwgaXQncwphbHdheXMgY29uY2VpdmFibGUgdGhhdCBmcmFjX2RpZ2l0cyBtaWdodCByZXR1cm4gYSBub25zZW5zaWNhbAp2YWx1ZS4gKElzIDQyOTQ5NjcyOTUgcmVhbGx5IGFueSBiZXR0ZXIgdGhhbiAtMT8pICBUaGUgY2xpZW50cyBvZgptb25leXB1bmN0LCB0aGUgZ2V0IGFuZCBwdXQgZmFjZXRzLCBjYW4gYW5kIGRvIHBlcmZvcm0gcmFuZ2UKY2hlY2tzLjwvcD4KPGhyPgo8YSBuYW1lPSIzNzciPjxoMz4zNzcuJm5ic3A7YmFzaWNfc3RyaW5nOjppbnNlcnQgYW5kIGxlbmd0aF9lcnJvcjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIxLjMuNS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nOjppbnNlcnQiPiBbbGliLnN0cmluZzo6aW5zZXJ0XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtSYXkgTGlzY2huZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTYgQXVnIDIwMDI8L3A+CjxwPgpTZWN0aW9uIDIxLjMuNS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nOjppbnNlcnQiPiBbbGliLnN0cmluZzo6aW5zZXJ0XTwvYT4sIHBhcmFncmFwaCA0LCBjb250YWlucyB0aGUgZm9sbG93aW5nLAoiVGhlbiB0aHJvd3MgbGVuZ3RoX2Vycm9yIGlmIHNpemUoKSAmZ3Q7PSBucG9zIC0gcmxlbi4iCjwvcD4KCjxwPgpSZWxhdGVkIHRvIERSIDgzLCB0aGlzIHNlbnRlbmNlIHNob3VsZCBwcm9iYWJseSBiZSByZW1vdmVkLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgcmVxdWlyZW1lbnQgaXMgcmVkdW5kYW50IGJ1dCBjb3JyZWN0LiAgTm8gY2hhbmdlIGlzCm5lZWRlZC48L3A+Cjxocj4KPGEgbmFtZT0iMzc4Ij48aDM+Mzc4LiZuYnNwO2xvY2FsZSBpbW11dGFiaWxpdHkgYW5kIGxvY2FsZTo6b3BlcmF0b3I9KCk8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUiPiBbbGliLmxvY2FsZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRHVwIj5EdXA8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgU2VwIDIwMDI8L3A+CjxwPgpJIHRoaW5rIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIDIyLjEuMSwgcDYgd2hpY2ggc2F5cyB0aGF0CjwvcD4KPHByZT4gICAgLTYtIEFuIGluc3RhbmNlIG9mIGxvY2FsZSBpcyBpbW11dGFibGU7IG9uY2UgYSBmYWNldCByZWZlcmVuY2UKICAgICAgICBpcyBvYnRhaW5lZCBmcm9tIGl0LCB0aGF0IHJlZmVyZW5jZSByZW1haW5zIHVzYWJsZSBhcyBsb25nCiAgICAgICAgYXMgdGhlIGxvY2FsZSB2YWx1ZSBpdHNlbGYgZXhpc3RzLgo8L3ByZT4KPHA+CmFuZCAyMi4xLjEuMiwgcDQ6CjwvcD4KPHByZT4gICAgY29uc3QgbG9jYWxlJmFtcDsgb3BlcmF0b3I9KGNvbnN0IGxvY2FsZSZhbXA7IG90aGVyKSB0aHJvdygpOwoKICAgIC00LSBFZmZlY3RzOiBDcmVhdGVzIGEgY29weSBvZiBvdGhlciwgcmVwbGFjaW5nIHRoZSBjdXJyZW50IHZhbHVlLgo8L3ByZT4KPHA+CkhvdyBjYW4gYSByZWZlcmVuY2UgdG8gYSBmYWNldCBvYnRhaW5lZCBmcm9tIGEgbG9jYWxlIG9iamVjdCByZW1haW4KdmFsaWQgYWZ0ZXIgYW4gYXNzaWdubWVudCB0aGF0IGNsZWFybHkgbXVzdCByZXBsYWNlIGFsbCB0aGUgZmFjZXRzCmluIHRoZSBsb2NhbGUgb2JqZWN0PyBJbWFnaW5lIGEgcHJvZ3JhbSBzdWNoIGFzIHRoaXMKPC9wPgo8cHJlPiAgICBzdGQ6OmxvY2FsZSBsb2MgKCJkZV9ERSIpOwogICAgY29uc3Qgc3RkOjpjdHlwZSZsdDtjaGFyJmd0OyAmYW1wO3IwID0gc3RkOjp1c2VfZmFjZXQmbHQ7c3RkOjpjdHlwZSZsdDtjaGFyJmd0OyAmZ3Q7KGxvYyk7CiAgICBsb2MgPSBzdGQ6OmxvY2FsZSAoImVuX1VTIik7CiAgICBjb25zdCBzdGQ6OmN0eXBlJmx0O2NoYXImZ3Q7ICZhbXA7cjEgPSBzdGQ6OnVzZV9mYWNldCZsdDtzdGQ6OmN0eXBlJmx0O2NoYXImZ3Q7ICZndDsobG9jKTsKPC9wcmU+CjxwPgpJcyByMCByZWFsbHkgc3VwcG9zZWQgdG8gYmUgcHJlc2VydmVkIGFuZCBkZXN0cm95ZWQgb25seSB3aGVuIGxvYyBnb2VzCm91dCBvZiBzY29wZT8KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxpPltTdW1tZXIgJzA0IG1pZC1tZWV0aW5nIG1haWxpbmc6IE1hcnRpbiBhbmQgRGlldG1hciBiZWxpZXZlIHRoaXMKICBpcyBhIGR1cGxpY2F0ZSBvZiBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzEiPjMxPC9hPiBhbmQgcmVjb21tZW5kIHRoYXQgaXQgYmUKICBjbG9zZWQuCl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIzODgiPjxoMz4zODguJm5ic3A7VXNlIG9mIGNvbXBsZXggYXMgYSBrZXkgaW4gYXNzb2NpYXRpdmUgY29udGFpbmVyczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI2LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuY2ZlbnYiPiBbbGliLmNmZW52XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNGdXR1cmUiPkZ1dHVyZTwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtHYWJyaWVsIERvcyBSZWlzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzggTm92IDIwMDI8L3A+CjxwPgpQcmFjdGljZSB3aXRoIHN0ZDo6Y29tcGxleCZsdDsmZ3Q7IGFuZCB0aGUgYXNzb2NpYXRpdmUgY29udGFpbmVycwpvY2Nhc2lvbmFsbHkgcmV2ZWFscyBhcnRpZmljaWFsIGFuZCBkaXN0cmFjdGluZyBpc3N1ZXMgd2l0aCBjb25zdHJ1Y3RzCnJlc2VtYmxpbmc6IHN0ZDo6c2V0Jmx0O3N0ZDo6Y29tcGxleCZsdDtkb3VibGUmZ3Q7ICZndDsgczsKPC9wPgoKPHA+ClRoZSBtYWluIHJlYXNvbiBmb3IgdGhlIGFib3ZlIHRvIGZhaWwgaXMgdGhlIGFic2VuY2Ugb2YgYW4gYXBwcm9yaWF0ZQpkZWZpbml0aW9uIGZvciBzdGQ6Omxlc3MmbHQ7c3RkOjpjb21wbGV4Jmx0O1QmZ3Q7ICZndDsuIFRoYXQgaW4gdHVybiBjb21lcyBmcm9tCnRoZSBkZWZpbml0aW9uIG9mIHRoZSBwcmltYXJ5IHRlbXBsYXRlIHN0ZDo6bGVzcyZsdDsmZ3Q7IGluIHRlcm1zIG9mCm9wZXJhdG9yJmx0Oy4KPC9wPgoKPHA+ClRoZSB1c3VhbCBhcmd1bWVudCBnb2VzIGFzIGZvbGxvd3M6IFNpbmNlIHRoZXJlIGlzIG5vIG9yZGVyaW5nIG92ZXIKdGhlIGNvbXBsZXggZmllbGQgY29tcGF0aWJsZSB3aXRoIGZpZWxkIG9wZXJhdGlvbnMgaXQgbWFrZXMgbGl0dGxlCnNlbnNlIHRvIGRlZmluZSBhIGZ1bmN0aW9uIG9wZXJhdG9yJmx0OyBvcGVyYXRpbmcgb24gdGhlIGRhdGF0eXBlCnN0ZDo6Y29tcGxleCZsdDtUJmd0Oy4gIFRoYXQgaXMgZmluZS4gSG93ZXZlciwgdGhhdCByZWFzb25pbmcgZG9lcyBub3QgY2FycnkKb3ZlciB0byBzdGQ6Omxlc3MmbHQ7VCZndDsgd2hpY2ggaXMgdXNlZCwgYW1vbmcgb3RoZXIgdGhpbmdzLCBieSBhc3NvY2lhdGl2ZQpjb250YWluZXJzIGFzIGFuIG9yZGVyaW5nIHVzZWZ1bCB0byBtZWV0IGNvbXBsZXhpdHkgcmVxdWlyZW1lbnRzLgo8L3A+Cgo8cD5SZWxhdGVkIGlzc3VlOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzNDgiPjM0ODwvYT4uPC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbmZvcm1hbGx5OiBBZGQgYSBzcGVjaWFsaXphdGlvbiBvZiBzdGQ6Omxlc3MgZm9yIHN0ZDo6Y29tcGxleC48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5EaXNjdXNzZWQgaW4gU2FudGEgQ3J1ei4gIEFuIG92ZXJ3aGVsbWluZyBtYWpvcml0eSBvZiB0aGUgTFdHCmJlbGlldmVzIHRoaXMgc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGEgRFI6IGl0J3MgYSByZXF1ZXN0IGZvciBhIGRlc2lnbgpjaGFuZ2UsIG5vdCBhIGRlZmVjdCBpbiB0aGUgZXhpc3Rpbmcgc3RhbmRhcmQuICBNb3N0IHBlb3BsZSAoMTAtMykKYmVsaWV2ZWQgdGhhdCB3ZSBwcm9iYWJseSBkb24ndCB3YW50IHRoaXMgY2hhbmdlLCBwZXJpb2Q6IGFzIHdpdGgKaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzQ4Ij4zNDg8L2E+LCBpdCdzIGhhcmQgdG8ga25vdyB3aGVyZSB0byBkcmF3IHRoZSBsaW5lLgpUaGUgTFdHIG5vdGVkIHRoYXQgdXNlcnMgd2hvIHdhbnQgdG8gcHV0IG9iamVjdHMgaW50byBhbiBhc3NvY2lhdGl2ZQpjb250YWluZXIgZm9yIHdoaWNoIDx0dD5vcGVyYXRvciZsdDs8L3R0PiBpc24ndCBkZWZpbmVkIGNhbiBzaW1wbHkKcHJvdmlkZSB0aGVpciBvd24gY29tcGFyaXNvbiBmdW5jdGlvbiBvYmplY3QuPC9wPgo8aHI+CjxhIG5hbWU9IjM5MCI+PGgzPjM5MC4mbmJzcDtDb3B5Q29uc3RydWN0aWJsZSByZXF1aXJlbWVudHMgdG9vIHN0cmljdDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuY29weWNvbnN0cnVjdGlibGUiPiBbbGliLmNvcHljb25zdHJ1Y3RpYmxlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNGdXR1cmUiPkZ1dHVyZTwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEb3VnIEdyZWdvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNCBPY3QgMjAwMjwvcD4KPHA+ClRoZSBDb3B5Q29uc3RydWN0aWJsZSByZXF1aXJlbWVudHMgaW4gVGFibGUgMzAgc3RhdGUgdGhhdCBmb3IgYW4Kb2JqZWN0IHQgb2YgdHlwZSBUICh3aGVyZSBUIGlzIENvcHlDb25zdHJ1Y3RpYmxlKSwgdGhlIGV4cHJlc3Npb24gJmFtcDt0CnJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdCAod2l0aCB0eXBlIFQqKS4gVGhpcyByZXF1aXJlbWVudCBpcyBvdmVybHkKc3RyaWN0LCBpbiB0aGF0IGl0IGRpc2FsbG93cyB0eXBlcyB0aGF0IG92ZXJsb2FkIG9wZXJhdG9yJmFtcDsgdG8gbm90CnJldHVybiBhIHZhbHVlIG9mIHR5cGUgVCouIFRoaXMgb2NjdXJzLCBmb3IgaW5zdGFuY2UsIGluIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2xhbWJkYSI+Qm9vc3QuTGFtYmRhPC9hPiBsaWJyYXJ5LCB3aGVyZQpvcGVyYXRvciZhbXA7IGlzIG92ZXJsb2FkZWQgZm9yIGEgQm9vc3QuTGFtYmRhIGZ1bmN0aW9uIG9iamVjdCB0byByZXR1cm4KYW5vdGhlciBmdW5jdGlvbiBvYmplY3QuCjwvcD4KCjxwPkV4YW1wbGU6PC9wPgoKPHByZT4gIHN0ZDo6dmVjdG9yJmx0O2ludCZndDsgdSwgdjsKICBpbnQgeDsKICAvLyAuLi4KICBzdGQ6OnRyYW5zZm9ybSh1LmJlZ2luKCksIHUuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlcih2KSwgXzEgKiB4KTsKPC9wcmU+Cgo8cD4KXzEgKiB4IHJldHVybnMgYW4gdW5uYW1lZCBmdW5jdGlvbiBvYmplY3Qgd2l0aCBvcGVyYXRvciZhbXA7IG92ZXJsb2FkZWQgdG8Kbm90IHJldHVybiBUKiAsIHRoZXJlZm9yZSByZW5kZXJpbmcgdGhlIHN0ZDo6dHJhbnNmb3JtIGNhbGwgaWxsLWZvcm1lZC4KSG93ZXZlciwgbW9zdCBzdGFuZGFyZCBsaWJyYXJ5IGltcGxlbWVudGF0aW9ucyB3aWxsIGNvbXBpbGUgdGhpcyBjb2RlCnByb3Blcmx5LCBhbmQgdGhlIHZpYWJpbGl0eSBvZiBzdWNoIGJpbmRlciBsaWJyYXJpZXMgaXMgc2V2ZXJlbHkgaGluZGVyZWQKYnkgdGhlIHVubmVjZXNzYXJ5IHJlc3RyaWN0aW9uIGluIHRoZSBDb3B5Q29uc3RydWN0aWJsZSByZXF1aXJlbWVudHMuCjwvcD4KCjxwPgpGb3IgcmVmZXJlbmNlLCB0aGUgYWRkcmVzcyBvZiBhbiBvYmplY3QgY2FuIGJlIHJldHJpZXZlZCB3aXRob3V0IHVzaW5nCnRoZSBhZGRyZXNzLW9mIG9wZXJhdG9yIHdpdGggdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB0ZW1wbGF0ZToKPC9wPgoKPHByZT4gIHRlbXBsYXRlICZsdDt0eXBlbmFtZSBUJmd0OyBUKiBhZGRyZXNzb2YoVCZhbXA7IHYpCiAgewogICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3QmbHQ7VComZ3Q7KAogICAgICAgICAmYW1wO2NvbnN0X2Nhc3QmbHQ7Y2hhciZhbXA7Jmd0OyhyZWludGVycHJldF9jYXN0Jmx0O2NvbnN0IHZvbGF0aWxlIGNoYXIgJmFtcDsmZ3Q7KHYpKSk7CiAgfQo8L3ByZT4KCjxwPgpOb3RlOiB0aGlzIHJlbGF0ZXMgZGlyZWN0bHkgdG8gbGlicmFyeSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzNTAiPjM1MDwvYT4sIHdoaWNoCndpbGwgbmVlZCB0byBiZSByZWV4YW1pbmVkIGlmIHRoZSBDb3B5Q29uc3RydWN0aWJsZSByZXF1aXJlbWVudHMKY2hhbmdlLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClJlbW92ZSB0aGUgbGFzdCB0d28gcm93cyBvZiBUYWJsZSAzMCwgZWxpbWluYXRpbmcgdGhlIHJlcXVpcmVtZW50cwp0aGF0ICZhbXA7dCBhbmQgJmFtcDt1IHJldHVybiB0aGUgYWRkcmVzcyBvZiB0IGFuZCB1LCByZXNwZWN0aXZlbHkuCjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgd2FzIGEgZGVsaWJlcmF0ZSBkZXNpZ24gZGVjaXNpb24uICBQZXJoYXBzIGl0IHNob3VsZCBiZQogICByZWNvbnNpZGVyZWQgZm9yIEMrKzB4LiA8L3A+Cjxocj4KPGEgbmFtZT0iMzkyIj48aDM+MzkyLiZuYnNwOydlcXVpdmFsZW5jZScgZm9yIGlucHV0IGl0ZXJhdG9yczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI0LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaW5wdXQuaXRlcmF0b3JzIj4gW2xpYi5pbnB1dC5pdGVyYXRvcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0NvcndpbiBKb3kmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTEgRGVjIDIwMDI8L3A+Cgo8cD4KSW4gc2VjdGlvbiAyNC4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLmlucHV0Lml0ZXJhdG9ycyI+IFtsaWIuaW5wdXQuaXRlcmF0b3JzXTwvYT4gdGFibGUgNzIgLQonSW5wdXQgSXRlcmF0b3IgUmVxdWlyZW1lbnRzJyB3ZSBoYXZlIGFzIGEgcG9zdGNvbmRpdGlvbiBvZiAqYToKIklmIGE9PWIgYW5kIChhLCBiKSBpcyBpbiB0aGUgZG9tYWluIG9mID09IHRoZW4gKmEgaXMgZXF1aXZhbGVudCB0byAqYiIuCjwvcD4KCjxwPgpJbiBzZWN0aW9uIDI0LjUuMy41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pc3RyZWFtYnVmLml0ZXJhdG9yOjplcXVhbCI+IFtsaWIuaXN0cmVhbWJ1Zi5pdGVyYXRvcjo6ZXF1YWxdPC9hPiBpdCBzdGF0ZXMgdGhhdAoiaXN0cmVhbWJ1Zl9pdGVyYXRvcjo6ZXF1YWwgcmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIGJvdGggaXRlcmF0b3JzCmFyZSBhdCBlbmQtb2Ytc3RyZWFtLCBvciBuZWl0aGVyIGlzIGF0IGVuZC1vZi1zdHJlYW0sIDxpPnJlZ2FyZGxlc3Mgb2YKd2hhdCBzdHJlYW1idWYgb2JqZWN0IHRoZXkgdXNlPC9pPi4iICAoTXkgZW1waGFzaXMpLgo8L3A+Cgo8cD4KVGhlIGRlZmVjdCBpcyB0aGF0IGVpdGhlciAnZXF1aXZhbGVudCcgbmVlZHMgdG8gYmUgbW9yZSBwcmVjaXNlbHkKZGVmaW5lZCBvciB0aGUgY29uZGl0aW9ucyBmb3IgZXF1YWxpdHkgaW4gMjQuNS4zLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6OmVxdWFsIj4gW2xpYi5pc3RyZWFtYnVmLml0ZXJhdG9yOjplcXVhbF08L2E+CmFyZSBpbmNvcnJlY3QuIChPciBib3RoKS4KPC9wPgoKPHA+Q29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOjwvcD4KPHByZT4gICAjaW5jbHVkZSAmbHQ7aW9zdHJlYW0mZ3Q7CiAgICNpbmNsdWRlICZsdDtmc3RyZWFtJmd0OwogICAjaW5jbHVkZSAmbHQ7aXRlcmF0b3ImZ3Q7CiAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CgogICBpbnQgbWFpbigpIHsKICAgIGlmc3RyZWFtIGZpbGUxKCJmaWxlMS50eHQiKSwgZmlsZTIoImZpbGUyLnR4dCIpOwogICAgaXN0cmVhbWJ1Zl9pdGVyYXRvciZsdDtjaGFyJmd0OyBmMShmaWxlMSksIGYyKGZpbGUyKTsKICAgIGNvdXQgJmx0OyZsdDsgImYxID09IGYyIDogIiAmbHQ7Jmx0OyBib29sYWxwaGEgJmx0OyZsdDsgKGYxID09IGYyKSAmbHQ7Jmx0OyBlbmRsOwogICAgY291dCAmbHQ7Jmx0OyAiZjEgPSAiICZsdDsmbHQ7ICpmMSAmbHQ7Jmx0OyBlbmRsOwogICAgY291dCAmbHQ7Jmx0OyAiZjIgPSAiICZsdDsmbHQ7ICpmMiAmbHQ7Jmx0OyBlbmRsOwogICAgcmV0dXJuIDA7CiAgIH0KPC9wcmU+Cgo8cD5Ob3cgYXNzdW1pbmcgdGhhdCBuZWl0aGVyIGYxIG9yIGYyIGFyZSBhdCB0aGUgZW5kLW9mLXN0cmVhbSB0aGVuCmYxID09IGYyIGJ5IDI0LjUuMy41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pc3RyZWFtYnVmLml0ZXJhdG9yOjplcXVhbCI+IFtsaWIuaXN0cmVhbWJ1Zi5pdGVyYXRvcjo6ZXF1YWxdPC9hPi48L3A+Cgo8cD5Ib3dldmVyLCBpdCBpcyB1bmxpa2VseSB0aGF0ICpmMSB3aWxsIGdpdmUgdGhlIHNhbWUgdmFsdWUgYXMgKmYyIGV4Y2VwdApieSBhY2NpZGVudC48L3A+Cgo8cD5TbyB3aGF0IGRvZXMgKmYxICdlcXVpdmFsZW50JyB0byAqZjIgbWVhbj8gIEkgdGhpbmsgdGhlIHN0YW5kYXJkIHNob3VsZApiZSBjbGVhcmVyIG9uIHRoaXMgcG9pbnQsIG9yIGF0IGxlYXN0IGJlIGV4cGxpY2l0IHRoYXQgdGhpcyBkb2VzIG5vdAptZWFuIHRoYXQgKmYxIGFuZCAqZjIgYXJlIHJlcXVpcmVkIHRvIGhhdmUgdGhlIHNhbWUgdmFsdWUgaW4gdGhlIGNhc2UKb2YgaW5wdXQgaXRlcmF0b3JzLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIHR3byBpdGVyYXRvcnMgYWVyIG5vdCBpbiB0aGUgZG9tYWluIG9mID09PC9wPgo8aHI+CjxhIG5hbWU9IjM5OSI+PGgzPjM5OS4mbmJzcDt2b2xhdGlvbnMgb2YgdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gcmVxdWlyZW1lbnRzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs1IEphbiAyMDAzPC9wPgogICAgPHA+ClRoZSBFZmZlY3RzIGNsYXVzZXMgZm9yIHRoZSB0d28gZnVuY3Rpb25zIGJlbG93IHZpb2xhdGUgdGhlCmdlbmVyYWwgcmVxdWlyZW1lbnRzIG9uIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9ucyBvdXRsaW5lZAppbiAyNy42LjEuMzogdGhleSBkbyBub3QgYmVnaW4gYnkgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdC4KSW5zdGVhZCwgdGhleSBiZWdpbiBieSBjYWxsaW5nIHdpZGVuICgnXG4nKSwgd2hpY2ggbWF5IHRocm93CmFuIGV4Y2VwdGlvbi4gVGhlIGV4Y2VwdGlvbiBpcyB0aGVuIGFsbG93ZWQgdG8gcHJvcGFnYXRlIGZyb20KdGhlIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIGlycmVzcGVjdGl2ZSBvZiB0aGUgc2V0dGluZyBvZgpleGNlcHRpb25zKCkuCiAgICA8L3A+CiAgICA8cD4KTm90ZSB0aGF0IGluIGxpZ2h0IG9mIDI3LjYuMS4xLCBwMyBhbmQgcDQsIHRoZSBmYWN0IHRoYXQgdGhlCmZ1bmN0aW9ucyBhbGxvdyBleGNlcHRpb25zIHRocm93biBmcm9tIHdpZGVuKCkgdG8gcHJvcGFnYXRlCm1heSBub3Qgc3RyaWN0bHkgc3BlYWtpbmcgYmUgYSBkZWZlY3QgKGJ1dCB0aGUgZmFjdCB0aGF0IHRoZQpmdW5jdGlvbnMgZG8gbm90IHN0YXJ0IGJ5IGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3Qgc3RpbGwKaXMpLiBIb3dldmVyLCBzaW5jZSBhbiBleGNlcHRpb24gdGhyb3duIGZyb20gY3R5cGUmbHQ7Y2hhclQmZ3Q7Cjo6d2lkZW4oKSBkdXJpbmcgYW55IG90aGVyIGlucHV0IG9wZXJhdGlvbiAoc2F5LCBmcm9tIHdpdGhpbgphIGNhbGwgdG8gbnVtX2dldCZsdDtjaGFyVCZndDs6OmdldCgpKSB3aWxsIGJlIGNhdWdodCBhbmQgY2F1c2UKYmFkYml0IHRvIGJlIHNldCwgdGhlc2UgdHdvIGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIHRyZWF0ZWQKZGlmZmVyZW50bHkgZm9yIHRoZSBzYWtlIG9mIGNvbnNpc3RlbmN5LgogICAgPC9wPgogIDxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpOb3QgYSBkZWZlY3QuICBUaGUgc3RhbmRhcmQgaXMgY29uc2lzdGVudCwgYW5kIHRoZSBiZWhhdmlvciByZXF1aXJlZApieSB0aGUgc3RhbmRhcmQgaXMgdW5hbWJpZ3VvdXMuICBZZXMsIGl0J3MgdGhlb3JldGljYWxseSBwb3NzaWJsZSBmb3IKd2lkZW4gdG8gdGhyb3cuICAoTm90IHRoYXQgdGhpcyB3aWxsIGhhcHBlbiBmb3IgdGhlIGRlZmF1bHQgY3R5cGUKZmFjZXQgb3IgZm9yIG1vc3QgcmVhbC13b3JsZCByZXBsYWNlbWVudCBjdHlwZSBmYWNldHMuKSAgVXNlcnMgd2hvCmRlZmluZSBjdHlwZSBmYWNldHMgdGhhdCBjYW4gdGhyb3csIGFuZCB3aG8gY2FyZSBhYm91dCB0aGlzIGJlaGF2aW9yLApjYW4gdXNlIGFsdGVybmF0aXZlIHNpZ25hdHVyZXMgdGhhdCBkb24ndCBjYWxsIHdpZGVuLgo8L3A+Cjxocj4KPGEgbmFtZT0iNDI5Ij48aDM+NDI5LiZuYnNwO3R5cG8gaW4gYmFzaWNfaW9zOjpjbGVhcihpb3N0YXRlKTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjQuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3N0YXRlLmZsYWdzIj4gW2xpYi5pb3N0YXRlLmZsYWdzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEdXAiPkR1cDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTggU2VwIDIwMDM8L3A+CiAgICAgICAgPHA+CgpUaGUgRWZmZWN0cyBjbGF1c2UgaW4gMjcuNC40LjMsIHA1IGRlc2NyaWJpbmcgdGhlIGVmZmVjdHMgb2YgYSBjYWxsIHRvCnRoZSBpb3NfYmFzZSBtZW1iZXIgZnVuY3Rpb24gY2xlYXIoaW9zdGF0ZSBzdGF0ZSkgc2F5cyB0aGF0IHRoZSBmdW5jdGlvbgpvbmx5IHRocm93cyBpZiB0aGUgcmVzcGVjdGl2ZSBiaXRzIGFyZSBhbHJlYWR5IHNldCBwcmlvciB0byB0aGUgZnVuY3Rpb24KY2FsbC4gVGhhdCdzIG9idmlvdXNseSBub3QgdGhlIGludGVudC4gSWYgaXQgd2FzLCBhIGNhbGwgdG8gY2xlYXIoYmFkYml0KQpvbiBhbiBvYmplY3QgZm9yIHdoaWNoIChyZHN0YXRlKCkgPT0gZ29vZGJpdCAmYW1wOyZhbXA7IGV4Y2VwdGlvbnMoKSA9PSBiYWRiaXQpCmhvbGRzIHdvdWxkIG5vdCByZXN1bHQgaW4gYW4gZXhjZXB0aW9uIGJlaW5nIHRocm93bi4KCiAgICAgICAgPC9wPgogICAgPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgogICAgICAgIDxwPgoKVGhlIHRleHQgb3VnaHQgdG8gYmUgY2hhbmdlZCBmcm9tCjxicj4KCiJJZiAocmRzdGF0ZSgpICZhbXA7IGV4Y2VwdGlvbnMoKSkgPT0gMCwgcmV0dXJucy4gLi4uIgo8YnI+Cgp0bwo8YnI+CgoiSWYgKHN0YXRlICZhbXA7IGV4Y2VwdGlvbnMoKSkgPT0gMCwgcmV0dXJucy4gLi4uIgogICAgICAgIDwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgaXMgYSBkdXBsaWNhdGUgb2YgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQxMiI+NDEyPC9hPi48L3A+Cjxocj4KPGEgbmFtZT0iNDMzIj48aDM+NDMzLiZuYnNwO0NvbnRyYWRpY3Rpb24gaW4gc3BlY2lmaWNhdGlvbiBvZiB1bmV4cGVjdGVkKCk8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxOC43LjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLnVuZXhwZWN0ZWQiPiBbbGliLnVuZXhwZWN0ZWRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1Z5YXRjaGVzbGF2IFN5c29sdHNldiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBTZXAgMjAwMzwvcD4KPHA+CkNsYXVzZSAxNS41LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9leGNlcHQuaHRtbCNleGNlcHQudW5leHBlY3RlZCI+IFtleGNlcHQudW5leHBlY3RlZF08L2E+IHBhcmFncmFwaCAxIHNheXMgdGhhdCAidm9pZCB1bmV4cGVjdGVkKCk7CmlzIGNhbGxlZCAoMTguNy4yKSBpbW1lZGlhdGVseSBhZnRlciBjb21wbGV0aW5nIHRoZSBzdGFjayB1bndpbmRpbmcKZm9yIHRoZSBmb3JtZXIgZnVuY3Rpb24iLCBidXQgMTguNy4yLjQgKEVmZmVjdHMpIHNheXMgdGhhdCAidm9pZAp1bmV4cGVjdGVkKCk7IC4gLiAuIENhbGxzIHRoZSB1bmV4cGVjdGVkX2hhbmRsZXIgZnVuY3Rpb24gaW4gZWZmZWN0CmltbWVkaWF0ZWx5IGFmdGVyIGV2YWx1YXRpbmcgdGhlIHRocm93ZXhwcmVzc2lvbiAoMTguNy4yLjIpLCIuICBJc24ndApoZXJlIGEgY29udHJhZGljdGlvbjogMTUuNS4yIHJlcXVpcmVzIHN0YWNrIGhhdmUgYmVlbiB1bndvdW5kIHdoZW4gaW4Kdm9pZCB1bmV4cGVjdGVkKCkgYW5kIHRoZXJlZm9yZSBpbiB1bmV4cGVjdGVkX2hhbmRsZXIgYnV0IDE4LjcuMi40CmNsYWltcyB0aGF0IHVuZXhwZWN0ZWRfaGFuZGxlciBpcyBjYWxsZWQgImluIGVmZmVjdCBpbW1lZGlhdGVseSIgYWZ0ZXIKZXZhbHVhdGlvbiBvZiB0aHJvdyBleHByZXNzaW9uIGlzIGZpbmlzaGVkLCBzbyB0aGVyZSBpcyBubyBzcGFjZSBsZWZ0CmZvciBzdGFjayB0byBiZSB1bndvdW5kIHRoZXJlZm9yZT8gIEkgdGhpbmsgdGhlIHBocmFzZSAiaW4gZWZmZWN0CmltbWVkaWF0ZWx5IiBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzdGFuZGFyZCBiZWNhdXNlIGl0IGJyaW5ncwphbWJpZ3VpdHkgaW4gdW5kZXJzdGFuZGluZy4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGVyZSBpcyBubyBjb250cmFkaWN0aW9uLiAgVGhlIHBocmFzZSAiaW4gZWZmZWN0IGltbWVkaWF0ZWx5IiBpcwogIGp1c3QgdG8gY2xhcmlmeSB3aGljaCBoYW5kbGVyIGlzIHRvIGJlIGNhbGxlZC48L3A+Cjxocj4KPGEgbmFtZT0iNDM3Ij48aDM+NDM3LiZuYnNwO0Zvcm1hdHRlZCBvdXRwdXQgb2YgZnVuY3Rpb24gcG9pbnRlcnMgaXMgY29uZnVzaW5nPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4yLjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbS5pbnNlcnRlcnMuYXJpdGhtZXRpYyI+IFtsaWIub3N0cmVhbS5pbnNlcnRlcnMuYXJpdGhtZXRpY108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SXZhbiBHb2RhcmQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjQgT2N0IDIwMDM8L3A+CjxwPgpHaXZlbjoKPC9wPgo8cHJlPnZvaWQgZihpbnQpIHt9CnZvaWQoKmcpKGludCkgPSBmOwpjb3V0ICZsdDsmbHQ7IGc7CjwvcHJlPgoKPHA+Cih3aXRoIHRoZSBleHBlY3RlZCAjaW5jbHVkZSBhbmQgdXNpbmdzKSwgdGhlIHZhbHVlIHByaW50ZWQgaXMgYSByYXRoZXIKc3VycHJpc2luZyAidHJ1ZSIuIFJhdGhlciB1c2VsZXNzIHRvby4KPC9wPgoKPHA+VGhlIHN0YW5kYXJkIGRlZmluZXM6PC9wPgoKPHByZT5vc3RyZWFtJmFtcDsgb3BlcmF0b3ImbHQ7Jmx0Oyhvc3RyZWFtJmFtcDssIHZvaWQqKTs8L3ByZT4KCjxwPndoaWNoIHBpY2tzIHVwIGFsbCBkYXRhIHBvaW50ZXJzIGFuZCBwcmludHMgdGhlaXIgaGV4IHZhbHVlLCBidXQgZG9lcwpub3QgcGljayB1cCBmdW5jdGlvbiBwb2ludGVycyBiZWNhdXNlIHRoZXJlIGlzIG5vIGRlZmF1bHQgY29udmVyc2lvbgpmcm9tIGZ1bmN0aW9uIHBvaW50ZXIgdG8gdm9pZCouIEFic2VudCB0aGF0LCB3ZSBmYWxsIGJhY2sgdG8gbGVnYWN5CmNvbnZlcnNpb25zIGZyb20gQyBhbmQgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY29udmVydGVkIHRvIGJvb2wuCjwvcD4KCjxwPlRoZXJlIHNob3VsZCBiZSBhbiBhbmFsb2dvdXMgaW5zZXJ0ZXIgdGhhdCBwcmludHMgdGhlIGFkZHJlc3Mgb2YgYQogIGZ1bmN0aW9uIHBvaW50ZXIuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGlzIGlzIGluZGVlZCBhIHdhcnQsIGJ1dCB0aGVyZSBpcyBubyBnb29kIHdheSB0byBzb2x2ZSBpdC4gIEMKICBkb2Vzbid0IHByb3ZpZGUgYSBwb3J0YWJsZSB3YXkgb2Ygb3V0cHV0dGluZyB0aGUgYWRkcmVzcyBvZiBhCiAgZnVuY3Rpb24gcG9pbnQgZWl0aGVyLjwvcD4KPGhyPgo8YSBuYW1lPSI0MzkiPjxoMz40MzkuJm5ic3A7U2hvdWxkIGZhY2V0cyBiZSBjb3B5YWJsZT88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNhdGVnb3JpZXMiPiBbbGliLmxvY2FsZS5jYXRlZ29yaWVzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MiBOb3YgMjAwMzwvcD4KPHA+VGhlIGZvbGxvd2luZyBmYWNldHMgY2xhc3NlcyBoYXZlIG5vIGNvcHkgY29uc3RydWN0b3JzIGRlc2NyaWJlZCBpbgogIHRoZSBzdGFuZGFyZCwgd2hpY2gsIGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQsIG1lYW5zIHRoYXQgdGhleSBhcmUKICBzdXBwb3NlZCB0byB1c2UgdGhlIGNvbXBpbGVyLWdlbmVyYXRlZCBkZWZhdWx0cy4gIERlZmF1bHQgY29weQogIGJlaGF2aW9yIGlzIHByb2JhYmx5IGluYXBwcm9wcmlhdGUuICBXZSBzaG91bGQgZWl0aGVyIG1ha2UgdGhlc2UKICBjbGFzc2VzIHVuY29weWFibGUgb3IgZWxzZSBzcGVjaWZ5IGV4YWN0bHkgd2hhdCB0aGVpciBjb25zdHJ1Y3RvcnMgZG8uPC9wPgoKPHA+UmVsYXRlZCBpc3N1ZTogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNDIxIj40MjE8L2E+LjwvcD4KCjxwcmU+ICAgICAgICBjdHlwZV9iYXNlCiAgICAgICAgY3R5cGUKICAgICAgICBjdHlwZV9ieW5hbWUKICAgICAgICBjdHlwZSZsdDtjaGFyJmd0OwogICAgICAgIGN0eXBlX2J5bmFtZSZsdDtjaGFyJmd0OwogICAgICAgIGNvZGVjdnRfYmFzZQogICAgICAgIGNvZGVjdnQKICAgICAgICBjb2RlY3Z0X2J5bmFtZQogICAgICAgIG51bV9nZXQKICAgICAgICBudW1fcHV0CiAgICAgICAgbnVtcHVuY3QKICAgICAgICBudW1wdW5jdF9ieW5hbWUKICAgICAgICBjb2xsYXRlCiAgICAgICAgY29sbGF0ZV9ieW5hbWUKICAgICAgICB0aW1lX2Jhc2UKICAgICAgICB0aW1lX2dldAogICAgICAgIHRpbWVfZ2V0X2J5bmFtZQogICAgICAgIHRpbWVfcHV0CiAgICAgICAgdGltZV9wdXRfYnluYW1lCiAgICAgICAgbW9uZXlfZ2V0CiAgICAgICAgbW9uZXlfcHV0CiAgICAgICAgbW9uZXlfYmFzZQogICAgICAgIG1vbmV5cHVuY3QKICAgICAgICBtb25leXB1bmN0X2J5bmFtZQogICAgICAgIG1lc3NhZ2VzX2Jhc2UKICAgICAgICBtZXNzYWdlcwogICAgICAgIG1lc3NhZ2VzX2J5bmFtZQo8L3ByZT4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBjb3B5IGNvbnN0cnVjdG9yIGluIHRoZSBiYXNlIGNsYXNzIGlzIHByaXZhdGUuPC9wPgo8aHI+CjxhIG5hbWU9IjQ0MCI+PC9hPjxoMz48YSBuYW1lPSI0NDAiPjQ0MC4mbmJzcDtTaG91bGQgc3RkOjpjb21wbGV4IHVzZSB1bnF1YWxpZmllZCB0cmFuc2NlbmRlbnRhbHM/PC9hPjwvaDM+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjYuMy44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmNvbXBsZXgudHJhbnNjZW5kZW50YWxzIj4gW2xpYi5jb21wbGV4LnRyYW5zY2VuZGVudGFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzUgTm92IDIwMDM8L3A+CjxwPgpPcGVyYXRpb25zIGxpa2UgPHR0PnBvdzwvdHQ+IGFuZCA8dHQ+ZXhwPC90dD4gb24KPHR0PmNvbXBsZXgmbHQ7VCZndDs8L3R0PiBhcmUgdHlwaWNhbGx5IGltcGxlbWVudGVkIGluIHRlcm1zIG9mCm9wZXJhdGlvbnMgbGlrZSA8dHQ+c2luPC90dD4gYW5kIDx0dD5jb3M8L3R0PiBvbiA8dHQ+VDwvdHQ+LiAgClNob3VsZCBpbXBsZW1lbnRhdGlvbnMgd3JpdGUgdGhpcyBhcyA8dHQ+c3RkOjpzaW48L3R0Piwgb3IgYXMgcGxhaW4KdW5xdWFsaWZpZWQgPHR0PnNpbjwvdHQ+Pwo8L3A+Cgo8cD5UaGUgaXNzdWUsIG9mIGNvdXJzZSwgaXMgd2hldGhlciB3ZSB3YW50IHRvIHVzZQphcmd1bWVudC1kZXBlbmRlbnQgbG9va3VwIGluIHRoZSBjYXNlIHdoZXJlIDx0dD5UPC90dD4gaXMgYQp1c2VyLWRlZmluZWQgdHlwZS4gIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgaXNzdWUgb2YgdmFsYXJyYXkKdHJhbnNjZW5kZW50YWxzLCBhcyBkaXNjdXNzZWQgaW4gaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNiI+MjI2PC9hPi48L3A+Cgo8cD5UaGlzIGlzc3VlIGRpZmZlcnMgZnJvbSB2YWxhcnJheSB0cmFuc2NlbmRlbnRhbHMgaW4gdHdvIGltcG9ydGFudAp3YXlzLiAgRmlyc3QsICJ0aGUgZWZmZWN0IG9mIGluc3RhbnRpYXRpbmcgdGhlIHRlbXBsYXRlCjx0dD5jb21wbGV4PC90dD4gZm9yIHR5cGVzIG90aGVyIHRoYW4gZmxvYXQsIGRvdWJsZSBvciBsb25nIGRvdWJsZSBpcwp1bnNwZWNpZmllZC4iICgyNi4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuY29tcGxleC5zeW5vcHNpcyI+IFtsaWIuY29tcGxleC5zeW5vcHNpc108L2E+KSBTZWNvbmQsIHRoZSBzdGFuZGFyZCBkb2VzIG5vdApkaWN0YXRlIGltcGxlbWVudGF0aW9uLCBzbyB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBhIHBhcnRpY3VsYXIKcmVhbCBtYXRoIGZ1bmN0aW9uIGlzIHVzZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgcGFydGljdWxhcgpjb21wbGV4IGZ1bmN0aW9uLjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPklmIHlvdSBpbnN0YW50aWF0ZSBzdGQ6OmNvbXBsZXggZm9yIHVzZXItZGVmaW5lZCB0eXBlcywgYWxsIGJldHMKYXJlIG9mZi48L3A+Cjxocj4KPGEgbmFtZT0iNDQ3Ij48aDM+NDQ3LiZuYnNwO1dyb25nIHRlbXBsYXRlIGFyZ3VtZW50IGZvciB0aW1lIGZhY2V0czwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjEuMS4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY2F0ZWdvcnkiPiBbbGliLmxvY2FsZS5jYXRlZ29yeV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRHVwIj5EdXA8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7UGV0ZSBCZWNrZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjYgRGVjIDIwMDM8L3A+CjxwPgoyMi4xLjEuMS4xLzQsIHRhYmxlIDUyLCAiUmVxdWlyZWQgSW5zdGFudGlhdGlvbnMiLCBsaXN0cywgYW1vbmcgb3RoZXJzOgo8L3A+CjxwcmU+ICAgIHRpbWVfZ2V0Jmx0O2NoYXIsSW5wdXRJdGVyYXRvciZndDsKICAgIHRpbWVfZ2V0X2J5bmFtZSZsdDtjaGFyLElucHV0SXRlcmF0b3ImZ3Q7CiAgICB0aW1lX2dldCZsdDt3Y2hhcl90LE91dHB1dEl0ZXJhdG9yJmd0OwogICAgdGltZV9nZXRfYnluYW1lJmx0O3djaGFyX3QsT3V0cHV0SXRlcmF0b3ImZ3Q7CjwvcHJlPgoKPHA+ClRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdGhlIGxhc3QgdHdvIHNob3VsZCBiZSBJbnB1dEl0ZXJhdG9yLCBub3QKT3V0cHV0SXRlcmF0b3IuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIHRoZSBzZWNvbmQgdGVtcGxhdGUgYXJndW1lbnQgdG8gSW5wdXRJdGVyYXRvci4KPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KRHVwbGljYXRlIG9mIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMjciPjMyNzwvYT4KPGhyPgo8YSBuYW1lPSI0NTAiPjxoMz40NTAuJm5ic3A7c2V0OjpmaW5kIGlzIGluY29uc2lzdGVudCB3aXRoIGFzc29jaWF0aXZlIGNvbnRhaW5lciByZXF1aXJlbWVudHM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4zLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5zZXQiPiBbbGliLnNldF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRHVwIj5EdXA8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QmlsbCBQbGF1Z2VyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzMwIEphbiAyMDA0PC9wPgo8cD5tYXAvbXVsdGltYXAgaGF2ZTo8L3A+Cgo8cHJlPglpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJmFtcDsgeCkgY29uc3Q7Cgljb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJmFtcDsgeCkgY29uc3Q7CjwvcHJlPgoKPHA+CndoaWNoIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgdGFibGUgb2YgYXNzb2NpYXRpdmUgY29udGFpbmVyIHJlcXVpcmVtZW50cy4KQnV0IHNldC9tdWx0aXNldCBoYXZlOgo8L3A+CjxwcmU+CWl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmYW1wOykgY29uc3Q7CjwvcHJlPgoKPHA+CnNldC9tdWx0aXNldCBzaG91bGQgbG9vayBsaWtlIG1hcC9tdWx0aW1hcCwgYW5kIGhvbm9yIHRoZSByZXF1aXJlbWVudHMKdGFibGUsIGluIHRoaXMgcmVnYXJkLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkR1cGxpY2F0ZSBvZiBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjE0Ij4yMTQ8L2E+LjwvcD4KPGhyPgo8YSBuYW1lPSI0NTEiPjxoMz40NTEuJm5ic3A7QXNzb2NpYXRpdmUgZXJhc2Ugc2hvdWxkIHJldHVybiBhbiBpdGVyYXRvcjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmFzc29jaWF0aXZlLnJlcW10cyI+IFtsaWIuYXNzb2NpYXRpdmUucmVxbXRzXTwvYT4sIDIzLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5hc3NvY2lhdGl2ZSI+IFtsaWIuYXNzb2NpYXRpdmVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0R1cCI+RHVwPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0JpbGwgUGxhdWdlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszMCBKYW4gMjAwNDwvcD4KPHA+bWFwL211bHRpbWFwL3NldC9tdWx0aXNldCBoYXZlOjwvcD4KPHByZT4Jdm9pZCBlcmFzZShpdGVyYXRvcik7Cgl2b2lkIGVyYXNlKGl0ZXJhdG9yLCBpdGVyYXRvcik7CjwvcHJlPgoKPHA+QnV0IHRoZXJlJ3Mgbm8gZ29vZCByZWFzb24gd2h5IHRoZXNlIGNhbid0IHJldHVybiBhbiBpdGVyYXRvciwgYXMgZm9yCnZlY3Rvci9kZXF1ZS9saXN0OjwvcD4KPHByZT4JaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IpOwoJaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IsIGl0ZXJhdG9yKTsKPC9wcmU+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJbmZvcm1hbGx5OiBUaGUgdGFibGUgb2YgYXNzb2NpYXRpdmUgY29udGFpbmVyIHJlcXVpcmVtZW50cywgYW5kIHRoZQpyZWxldmFudCB0ZW1wbGF0ZSBjbGFzc2VzLCBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhdG9yIGRlc2lnbmF0aW5nIHRoZQpmaXJzdCBlbGVtZW50IGJleW9uZCB0aGUgZXJhc2VkIHN1YnJhbmdlLgo8L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5EdXBsaWNhdGUgb2YgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEzMCI+MTMwPC9hPjwvcD4KPGhyPgo8YSBuYW1lPSI0NTIiPjxoMz40NTIuJm5ic3A7IGxvY2FsZTo6Y29tYmluZSBzaG91bGQgYmUgcGVybWl0dGVkIHRvIGdlbmVyYXRlIGEgbmFtZWQgbG9jYWxlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMS4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubWVtYmVycyI+IFtsaWIubG9jYWxlLm1lbWJlcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0JpbGwgUGxhdWdlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszMCBKYW4gMjAwNDwvcD4KPHByZT50ZW1wbGF0ZSZsdDtjbGFzcyBGYWNldCZndDsKCWxvY2FsZTo6Y29tYmluZShjb25zdCBsb2NhbGUmYW1wOykgY29uc3Q7CjwvcHJlPgo8cD4KaXMgb2JsaWdlZCB0byBjcmVhdGUgYSBsb2NhbGUgdGhhdCBoYXMgbm8gbmFtZS4gVGhpcyBpcyBvdmVyc3BlY2lmaWNhdGlvbgphbmQgb3ZlcmtpbGwuIFRoZSByZXN1bHRpbmcgbG9jYWxlIHNob3VsZCBmb2xsb3cgdGhlIHVzdWFsIHJ1bGVzIC0tIGl0CmhhcyBhIG5hbWUgaWYgdGhlIGxvY2FsZSBhcmd1bWVudCBoYXMgYSBuYW1lIGFuZCBGYWNldCBpcyBvbmUgb2YgdGhlCnN0YW5kYXJkIGZhY2V0cy4KPC9wPgoKPHA+PGk+WwogU3lkbmV5IGFuZCBwb3N0LVN5ZG5leSAoc2VlIGMrK3N0ZC1saWItMTM0MzksIGMrK3N0ZC1saWItMTM0NDAsCiBjKytzdGQtbGliLTEzNDQzKTogYWdyZWVkIHRoYXQgaXQncyBvdmVya2lsbCB0byBzYXkgdGhhdCB0aGUgbG9jYWxlCiBpcyBvYmxpZ2F0ZWQgdG8gYmUgbmFtZWxlc3MuICBIb3dldmVyLCB3ZSBhbHNvIGNhbid0IHJlcXVpcmUgaXQgdG8KIGhhdmUgYSBuYW1lLiAgQXQgdGhlIG1vbWVudCwgbG9jYWxlIG5hbWVzIGFyZSBiYXNlZCBvbiBjYXRlZ29yaWVzCiBhbmQgbm90IG9uIGluZGl2aWR1YWwgZmFjZXRzLiAgSWYgYSBsb2NhbGUgY29udGFpbnMgdHdvIGRpZmZlcmVudAogZmFjZXRzIG9mIGRpZmZlcmVudCBuYW1lcyBmcm9tIHRoZSBzYW1lIGNhdGVnb3J5LCB0aGVuIHRoaXMgd291bGQKIG5vdCBmaXQgaW50byBleGlzdGluZyBuYW1pbmcgc2NoZW1lcy4gIFdlIG5lZWQgdG8gZ2l2ZQogaW1wbGVtZW50YXRpb25zIG1vcmUgZnJlZWRvbS4gIEJpbGwgd2lsbCBwcm92aWRlIHdvcmRpbmcuCl08L2k+PC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+QWZ0ZXIgZnVydGhlciBkaXNjdXNzaW9uIHRoZSBMV0cgZGVjaWRlZCB0byBjbG9zZSB0aGlzIGFzIE5BRC4KICBUaGUgZnVuZGFtZW50YWwgcHJvYmxlbSBpcyB0aGF0IG5hbWVzIHJpZ2h0IG5vdyBhcmUgcGVyLWNhdGVnb3J5LAogIG5vdCBwZXItZmFjZXQuICBUaGUgPHR0PmNvbWJpbmU8L3R0PiBtZW1iZXIgZnVuY3Rpb24gd29ya3MgYXQgdGhlCiAgd3JvbmcgbGV2ZWwgb2YgZ3JhbnVsYXJpdHkuPC9wPgo8aHI+CjxhIG5hbWU9IjQ3MiI+PGgzPjQ3Mi4mbmJzcDtNaXNzaW5nICJSZXR1cm5zIiBjbGF1c2UgaW4gc3RkOjplcXVhbF9yYW5nZTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjMuMy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuZXF1YWwucmFuZ2UiPiBbbGliLmVxdWFsLnJhbmdlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEdXAiPkR1cDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtQcmF0ZWVrIFIgS2FyYW5kaWthciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBGZWIgMTkwMDwvcD4KPHA+ClRoZXJlIGlzIG5vICJSZXR1cm5zOiIgY2xhdXNlIGZvciBzdGQ6OmVxdWFsX3JhbmdlLCB3aGljaCByZXR1cm5zIG5vbi12b2lkLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkZpeGVkIGFzIHBhcnQgb2YgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI3MCI+MjcwPC9hPi48L3A+Cjxocj4KPGEgbmFtZT0iNDc2Ij48aDM+NDc2LiZuYnNwO0ZvcndhcmQgSXRlcmF0b3IgaW1wbGllZCBtdXRhYmlsaXR5PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjQuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5mb3J3YXJkLml0ZXJhdG9ycyI+IFtsaWIuZm9yd2FyZC5pdGVyYXRvcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RhdmUgQWJyYWhhbXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7OSBKdWwgMjAwNDwvcD4KCjxwPjI0LjEvMyBzYXlzOjwvcD4KPGJsb2NrcXVvdGU+CiAgRm9yd2FyZCBpdGVyYXRvcnMgc2F0aXNmeSBhbGwgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgaW5wdXQgYW5kCiAgb3V0cHV0IGl0ZXJhdG9ycyBhbmQgY2FuIGJlIHVzZWQgd2hlbmV2ZXIgZWl0aGVyIGtpbmQgaXMgc3BlY2lmaWVkCjwvYmxvY2txdW90ZT4KCjxwPgpUaGUgcHJvYmxlbSBpcyB0aGF0IHNhdGlzZnlpbmcgdGhlIHJlcXVpcmVtZW50cyBvZiBvdXRwdXQgaXRlcmF0b3IKbWVhbnMgdGhhdCB5b3UgY2FuIGFsd2F5cyBhc3NpZ24gKnNvbWV0aGluZyogaW50byB0aGUgcmVzdWx0IG9mCmRlcmVmZXJlbmNpbmcgaXQuICBUaGF0IG1ha2VzIGFsbW9zdCBhbGwgbm9uLW11dGFibGUgZm9yd2FyZAppdGVyYXRvcnMgbm9uLWNvbmZvcm1pbmcuICBJIHRoaW5rIHdlIG5lZWQgdG8gc2V2ZXIgdGhlIHJlZmluZW1lbnQKcmVsYXRpb25zaGlwIGJldHdlZW4gZm9yd2FyZCBpdGVyYXRvciBhbmQgb3V0cHV0IGl0ZXJhdG9yLgo8L3A+Cgo8cD5SZWxhdGVkIGlzc3VlOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjAwIj4yMDA8L2E+LiAgQnV0IHRoaXMgaXMgbm90IGEgZHVwLjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlllcywgMjQuMS8zIGRvZXMgc2F5IHRoYXQuIEJ1dCBpdCdzIGludHJvZHVjdG9yeSBtYXRlcmlhbC4gVGhlCnByZWNpc2Ugc3BlY2lmaWNhdGlvbiBpcyBpbiAyNC4xLjMsIGFuZCB0aGUgcmVxdXJlbWVudHMgdGFibGUgdGhlcmUgaXMKcmlnaHQuICBXZSBkb24ndCBuZWVkIHRvIGZpbmUtdHVuZSBpbnRyb2R1Y3Rvcnkgd29yZGluZy4gIChFc3BlY2lhbGx5CnNpbmNlIHRoaXMgd29yZGluZyBpcyBsaWtlbHkgdG8gYmUgY2hhbmdlZCBhcyBwYXJ0IG9mIHRoZSBpdGVyYXRvcgpvdmVyaGF1bC4pPC9wPiAKPGhyPgo8YSBuYW1lPSI0NzciPjxoMz40NzcuJm5ic3A7T3BlcmF0b3ItJmd0OyBmb3IgY29uc3QgZm9yd2FyZCBpdGVyYXRvcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLmZvcndhcmQuaXRlcmF0b3JzIj4gW2xpYi5mb3J3YXJkLml0ZXJhdG9yc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRHVwIj5EdXA8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGF2ZSBBYnJhaGFtcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxMSBKdWwgMjAwNDwvcD4KPHA+ClRoZSBGb3J3YXJkIEl0ZXJhdG9yIHJlcXVpcmVtZW50cyB0YWJsZSBjb250YWlucyB0aGUgZm9sbG93aW5nOgo8L3A+CjxwcmU+IGV4cHJlc3Npb24gIHJldHVybiB0eXBlICAgICAgICAgb3BlcmF0aW9uYWwgIHByZWNvbmRpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNzCiAgPT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT0KICBhLSZndDttICAgICAgICBVJmFtcDsgaWYgWCBpcyBtdXRhYmxlLCAoKmEpLm0gICAgICAgcHJlOiAoKmEpLm0gaXMgd2VsbC1kZWZpbmVkLgogICAgICAgICAgICAgIG90aGVyd2lzZSBjb25zdCBVJmFtcDsKCiAgci0mZ3Q7bSAgICAgICAgVSZhbXA7ICAgICAgICAgICAgICAgICAgKCpyKS5tICAgICAgIHByZTogKCpyKS5tIGlzIHdlbGwtZGVmaW5lZC4KPC9wcmU+Cgo8cD4KVGhlIGZpcnN0IGxpbmUgaXMgZXhhY3RseSByaWdodC4gIFRoZSBzZWNvbmQgbGluZSBpcyB3cm9uZy4gIEJhc2ljYWxseQppdCBpbXBsaWVzIHRoYXQgdGhlIGNvbnN0LW5lc3Mgb2YgdGhlIGl0ZXJhdG9yIGFmZmVjdHMgdGhlIGNvbnN0LW5lc3MKb2YgcmVmZXJlbmNlZCBtZW1iZXJzLiAgQnV0IFBhcmFncmFwaCAxMSBvZiBbbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50c10gc2F5czoKPC9wPgoKPGJsb2NrcXVvdGU+CiAgIEluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMsIGEgYW5kIGIgZGVub3RlIHZhbHVlcyBvZiB0eXBlIGNvbnN0IFgsIG4KICAgZGVub3RlcyBhIHZhbHVlIG9mIHRoZSBkaWZmZXJlbmNlIHR5cGUgRGlzdGFuY2UsIHUsIHRtcCwgYW5kIG0KICAgZGVub3RlIGlkZW50aWZpZXJzLCByIGRlbm90ZXMgYSB2YWx1ZSBvZiBYJmFtcDssIHQgZGVub3RlcyBhIHZhbHVlIG9mCiAgIHZhbHVlIHR5cGUgVCwgbyBkZW5vdGVzIGEgdmFsdWUgb2Ygc29tZSB0eXBlIHRoYXQgaXMgd3JpdGFibGUgdG8KICAgdGhlIG91dHB1dCBpdGVyYXRvci4KPC9ibG9ja3F1b3RlPgoKPHA+QUZBSUNUIGlmIHdlIG5lZWQgdGhlIHNlY29uZCBsaW5lIGF0IGFsbCwgaXQgc2hvdWxkIHJlYWQgdGhlIHNhbWUKYXMgdGhlIGZpcnN0IGxpbmUuPC9wPgoKPHA+UmVsYXRlZCBpc3N1ZTogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQ3OCI+NDc4PC9hPjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBhZ3JlZXMgdGhhdCB0aGlzIGlzIGEgcmVhbCBwcm9ibGVtLiAgTWFya2VkIGFzIGEgRFVQCiAgYmVjYXVzZSB0aGUgTFdHIGNob3NlIHRvIGFkb3B0IHRoZSBzb2x1dGlvbiBwcm9wb3NlZCBpbgogIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0NzgiPjQ3ODwvYT4uCjwvcD4KPGhyPgo8YSBuYW1lPSI0ODAiPjxoMz40ODAuJm5ic3A7dW5hcnlfZnVuY3Rpb24gYW5kIGJpbmFyeV9mdW5jdGlvbiBzaG91bGQgaGF2ZSBwcm90ZWN0ZWQgbm9udmlydHVhbCBkZXN0cnVjdG9yczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIudHVwbGUudHVwbGUiPiBbbGliLnR1cGxlLnR1cGxlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKb2UgR290dG1hbiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxOSBBdWcgMjAwNDwvcD4KPHA+VGhlIGNsYXNzZXMgc3RkOjp1bmFyeV9mdW5jdGlvbiBhbmQgc3RkOjpiaW5hcnlfZnVuY3Rpb24gYXJlIGJvdGgKZGVzaWduZWQgdG8gYmUgaW5oZXJpdGVkIGZyb20gYnV0IGNvbnRhaW4gbm8gdmlydHVhbCBmdW5jdGlvbnMuICBUaGlzCm1ha2VzIGl0IHRvbyBlYXN5IGZvciBhIG5vdmljZSBwcm9ncmFtbWVyIHRvIHdyaXRlIGNvZGUgbGlrZQpiaW5hcnlfZnVuY3Rpb24mbHQ7aW50LCBpbnQsIGludCZndDsgKnAgPSBuZXcgcGx1cyZsdDtpbnQmZ3Q7OyBkZWxldGUgcDs8L3A+Cgo8cD5UaGVyZSBhcmUgdHdvIGNvbW1vbiB3YXlzIHRvIHByZXZlbnQgdGhpcyBzb3VyY2Ugb2YgdW5kZWZpbmVkCmJlaGF2aW9yOiBnaXZlIHRoZSBiYXNlIGNsYXNzIGEgcHVibGljIHZpcnR1YWwgZGVzdHJ1Y3Rvciwgb3IgZ2l2ZSBpdAphIHByb3RlY3RlZCBub252aXJ0dWFsIGRlc3RydWN0b3IuICBTaW5jZSB1bmFyeV9mdW5jdGlvbiBhbmQKYmluYXJ5X2Z1bmN0aW9uIGhhdmUgbm8gb3RoZXIgdmlydHVhbCBmdW5jdGlvbnMsIChub3RlIGluIHBhcnRpY3VsYXIKdGhlIGFic2VuY2Ugb2YgYW4gb3BlcmF0b3IoKSgpICksIGl0IHdvdWxkIGNvc3QgdG9vIG11Y2ggdG8gZ2l2ZSB0aGVtCnB1YmxpYyB2aXJ0dWFsIGRlc3RydWN0b3JzLiAgVGhlcmVmb3JlLCB0aGV5IHNob3VsZCBiZSBnaXZlbiBwcm90ZWN0ZWQKbm9udmlydHVhbCBkZXN0cnVjdG9ycy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIFBhcmFncmFwaCAyMC4zLjEgb2YgdGhlIFN0YW5kYXJkIGZyb208L3A+CjxwcmU+ICAgIHRlbXBsYXRlICZsdDtjbGFzcyBBcmcsIGNsYXNzIFJlc3VsdCZndDsKICAgIHN0cnVjdCB1bmFyeV9mdW5jdGlvbiB7CiAgICAgICAgdHlwZWRlZiBBcmcgYXJndW1lbnRfdHlwZTsKICAgICAgICB0eXBlZGVmIFJlc3VsdCByZXN1bHRfdHlwZTsKICAgIH07CgogICAgdGVtcGxhdGUgJmx0O2NsYXNzIEFyZzEsIGNsYXNzIEFyZzIsIGNsYXNzIFJlc3VsdCZndDsKICAgIHN0cnVjdCBiaW5hcnlfZnVuY3Rpb24gewogICAgICAgIHR5cGVkZWYgQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogICAgICAgIHR5cGVkZWYgQXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICAgICAgICB0eXBlZGVmIFJlc3VsdCByZXN1bHRfdHlwZTsKICAgIH07CjwvcHJlPgoKPHA+dG88L3A+CjxwcmU+ICAgIHRlbXBsYXRlICZsdDtjbGFzcyBBcmcsIGNsYXNzIFJlc3VsdCZndDsKICAgICAgICBzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogICAgICAgIHR5cGVkZWYgQXJnIGFyZ3VtZW50X3R5cGU7CiAgICAgICAgdHlwZWRlZiBSZXN1bHQgcmVzdWx0X3R5cGU7CiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgfnVuYXJ5X2Z1bmN0aW9uKCkge30KICAgIH07CgogICAgdGVtcGxhdGUgJmx0O2NsYXNzIEFyZzEsIGNsYXNzIEFyZzIsIGNsYXNzIFJlc3VsdCZndDsKICAgIHN0cnVjdCBiaW5hcnlfZnVuY3Rpb24gewogICAgICAgIHR5cGVkZWYgQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogICAgICAgIHR5cGVkZWYgQXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICAgICAgICB0eXBlZGVmIFJlc3VsdCByZXN1bHRfdHlwZTsKICAgIHByb3RlY3RlZDoKICAgICAgICB+YmluYXJ5X2Z1bmN0aW9uKCkge30KICAgIH07CjwvcHJlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBkb2Vzbid0IGJlbGlldmUgdGhlIGV4aXN0aW5nIGRlZmluaXRpb24gY2F1c2VzIGFueWJvZHkgYW55CiAgY29uY3JldGUgaGFybS48L3A+Cjxocj4KPGEgbmFtZT0iNDgxIj48aDM+NDgxLiZuYnNwO3VuaXF1ZSdzIGVmZmVjdHMgb24gdGhlIHJhbmdlIFtyZXN1bHQsIGxhc3QpPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMi44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLnVuaXF1ZSI+IFtsaWIuYWxnLnVuaXF1ZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5kcmV3IEtvZW5pZyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszMCBBdWcgMjAwNDwvcD4KPHA+ClRoZSBzdGFuZGFyZCBzYXlzIHRoYXQgdW5pcXVlKGZpcnN0LCBsYXN0KSAiZWxpbWluYXRlcyBhbGwgYnV0IHRoZQpmaXJzdCBlbGVtZW50IGZyb20gZXZlcnkgY29uc2VjdXRpdmUgZ3JvdXAgb2YgZXF1YWwgZWxlbWVudHMiIGluCltmaXJzdCwgbGFzdCkgYW5kIHJldHVybnMgInRoZSBlbmQgb2YgdGhlIHJlc3VsdGluZyByYW5nZSIuICBTbyBhCnBvc3Rjb25kaXRpb24gaXMgdGhhdCBbZmlyc3QsIHJlc3VsdCkgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBbZmlyc3QsCmxhc3QpIGV4Y2VwdCB0aGF0IGR1cGxpY2F0ZXMgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQuCjwvcD4KCjxwPldoYXQgcG9zdGNvbmRpdGlvbnMgYXJlIHRoZXJlIG9uIHRoZSByYW5nZSBbcmVzdWx0LCBsYXN0KT8gIE9uZQogIG1pZ2h0IGFyZ3VlIHRoYXQgdGhlIHN0YW5kYXJkIHNheXMgbm90aGluZyBhYm91dCB0aG9zZSB2YWx1ZXMsIHNvCiAgdGhleSBjYW4gYmUgYW55dGhpbmcuICBPbmUgbWlnaHQgYWxzbyBhcmd1ZSB0aGF0IHRoZSBzdGFuZGFyZAogIGRvZXNuJ3QgcGVybWl0IHRob3NlIHZhbHVlcyB0byBiZSBjaGFuZ2VkLCBzbyB0aGV5IG11c3Qgbm90IGJlLgogIFNob3VsZCB0aGUgc3RhbmRhcmQgc2F5IHNvbWV0aGluZyBleHBsaWNpdCBvbmUgd2F5IG9yIHRoZSBvdGhlcj88L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgo8L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5XZSBkb24ndCB3YW50IHRvIG1ha2UgbWFueSBndWFyYW50ZWVzIGFib3V0IHdoYXQncyBpbiBbcmVzdWx0LAplbmQpLiBNYXliZSB3ZSBhcmVuJ3QgYmVpbmcgcXVpdGUgZXhwbGljaXQgZW5vdWdoIGFib3V0IG5vdCBiZWluZwpleHBsaWNpdCwgYnV0IGl0J3MgaGFyZCB0byB0aGluayB0aGF0J3MgYSBtYWpvciBwcm9ibGVtLjwvcD4KPGhyPgo8YSBuYW1lPSI0ODMiPjxoMz40ODMuJm5ic3A7SGV0ZXJvZ2VuZW91cyBlcXVhbGl0eSBhbmQgRXF1YWxpdHlDb21wYXJhYmxlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5ub25tb2RpZnlpbmciPiBbbGliLmFsZy5ub25tb2RpZnlpbmddPC9hPiwgMjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5tb2RpZnlpbmcub3BlcmF0aW9ucyI+IFtsaWIuYWxnLm1vZGlmeWluZy5vcGVyYXRpb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEdXAiPkR1cDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtQZXRlciBEaW1vdiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBTZXAgMjAwNDwvcD4KPHA+Yysrc3RkLWxpYi0xNDI2MjwvcD4KCjxwPltsaWIuYWxnLmZpbmRdIHJlcXVpcmVzIFQgdG8gYmUgRXF1YWxpdHlDb21wYXJhYmxlOjwvcD4KCjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIFQmZ3Q7CiAgIElucHV0SXRlcmF0b3IgZmluZChJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUJmFtcDsgdmFsdWUpOwo8L3ByZT4KCjxwPgpIb3dldmVyIHRoZSBjb25kaXRpb24gYmVpbmcgdGVzdGVkLCBhcyBzcGVjaWZpZWQgaW4gdGhlIEVmZmVjdHMKY2xhdXNlLCBpcyBhY3R1YWxseSAqaSA9PSB2YWx1ZSwgd2hlcmUgaSBpcyBhbiBJbnB1dEl0ZXJhdG9yLgo8L3A+Cgo8cD4KVGhlIHR3byBjbGF1c2VzIGFyZSBpbiBhZ3JlZW1lbnQgb25seSBpZiB0aGUgdHlwZSBvZiAqaSBpcyBULCBidXQgdGhpcwppc24ndCBuZWNlc3NhcmlseSB0aGUgY2FzZS4gKmkgbWF5IGhhdmUgYSBoZXRlcm9nZW5lb3VzIGNvbXBhcmlzb24Kb3BlcmF0b3IgdGhhdCB0YWtlcyBhIFQsIG9yIGEgVCBtYXkgYmUgY29udmVydGlibGUgdG8gdGhlIHR5cGUgb2YgKmkuCjwvcD4KCjxwPkZ1cnRoZXIgZGlzY3Vzc2lvbiAoYysrc3RkLWxpYi0xNDI2NCk6IHRoaXMgcHJvYmxlbSBhZmZlY3RzIGEKICBudW1iZXIgb2YgYWxnb3JpdGhzbSBpbiBjbGF1c2UgMjUsIG5vdCBqdXN0IDx0dD5maW5kPC90dD4uICBXZQogIHNob3VsZCB0cnkgdG8gcmVzb2x2ZSB0aGlzIHByb2JsZW0gZXZlcnl3aGVyZSBpdCBhcHBlYXJzLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+W2xpYi5hbGcuZmluZF06PC9wPgo8YmxvY2txdW90ZT4KICAgUmVtb3ZlIFtsaWIuYWxnLmZpbmRdLzEuCjwvYmxvY2txdW90ZT4KCjxwPltsaWIuYWxnLmNvdW50XTo8L3A+CjxibG9ja3F1b3RlPgogICBSZW1vdmUgW2xpYi5hbGcuY291bnRdLzEuCjwvYmxvY2txdW90ZT4KCjxwPltsaWIuYWxnLnNlYXJjaF06PC9wPgo8YmxvY2txdW90ZT4KICAgUmVtb3ZlICJUeXBlIFQgaXMgRXF1YWxpdHlDb21wYXJhYmxlICgyMC4xLjEpLCAiIGZyb20gW2xpYi5hbGcuc2VhcmNoXS80Lgo8L2Jsb2NrcXVvdGU+Cgo8cD5bbGliLmFsZy5yZXBsYWNlXTo8L3A+Cgo8YmxvY2txdW90ZT4KICAgPHA+CiAgIFJlbW92ZSBbbGliLmFsZy5yZXBsYWNlXS8xLgogICBSZXBsYWNlIFtsYi5hbGcucmVwbGFjZV0vMiB3aXRoOgogICA8L3A+CgogICAgICAgPGJsb2NrcXVvdGU+CiAgICAgICBGb3IgZXZlcnkgaXRlcmF0b3IgaSBpbiB0aGUgcmFuZ2UgW2ZpcnN0LCBsYXN0KSBmb3Igd2hpY2ggKmkgPT0gdmFsdWUKICAgICAgIG9yIHByZWQoKmkpIGhvbGRzIHBlcmZvcm0gKmkgPSBuZXdfdmFsdWUuCiAgICAgICA8L2Jsb2NrcXVvdGU+CgogICA8cD4KICAgUmVtb3ZlIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiAvNC4KICAgUmVwbGFjZSB0aGUgYmVnaW5uaW5nIG9mIC81IHdpdGg6CiAgIDwvcD4KCiAgICAgICA8YmxvY2txdW90ZT4KICAgICAgIEZvciBldmVyeSBpdGVyYXRvciBpIGluIHRoZSByYW5nZSBbcmVzdWx0LCByZXN1bHQgKyAobGFzdCAtCiAgICAgICBmaXJzdCkpLCBhc3NpZ24gdG8gKmkgZWl0aGVyLi4uCiAgICAgICA8L2Jsb2NrcXVvdGU+CgogICA8cD4oTm90ZSB0aGUgZGVmZWN0IGhlcmUsIGN1cnJlbnQgdGV4dCBzYXlzIGFzc2lnbiB0byBpLCBub3QgKmkpLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+W2xpYi5hbGcuZmlsbF06PC9wPgoKPGJsb2NrcXVvdGU+CiAgIDxwPgogICBSZW1vdmUgIlR5cGUgVCBpcyBBc3NpZ25hYmxlICgyMy4xKSwgIiBmcm9tIC8xLgogICBSZXBsYWNlIC8yIHdpdGg6CiAgIDwvcD4KCiAgICAgICA8YmxvY2txdW90ZT4KICAgICAgIEZvciBldmVyeSBpdGVyYXRvciBpIGluIHRoZSByYW5nZSBbZmlyc3QsIGxhc3QpIG9yIFtmaXJzdCwgZmlyc3QgKyBuKSwKICAgICAgIHBlcmZvcm0gKmkgPSB2YWx1ZS4KICAgICAgIDwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKPHA+W2xpYi5hbGcucmVtb3ZlXTo8L3A+CjxibG9ja3F1b3RlPgogICBSZW1vdmUgLzEuCiAgIFJlbW92ZSB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgLzYuCjwvYmxvY2txdW90ZT4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5EdXBsaWNhdGUgb2YgKGEgc3Vic2V0IG9mKSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjgzIj4yODM8L2E+LjwvcD4KPGhyPgo8YSBuYW1lPSI0ODYiPjxoMz40ODYuJm5ic3A7bWluL21heCBDb3B5Q29uc3RydWN0aWJsZSByZXF1aXJlbWVudCBpcyB0b28gc3RyaWN0PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMy43IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLm1pbi5tYXgiPiBbbGliLmFsZy5taW4ubWF4XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEdXAiPkR1cDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEYXZlIEFicmFoYW1zJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEzIE9jdCAyMDA0PC9wPgo8cD5BIHN0cmFpZ2h0Zm9yd2FyZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGVzZSBhbGdvcml0aG1zIGRvZXMgbm90IG5lZWQgdG8KY29weSBULjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5kcm9wIHRoZSB0aGUgd29yZHMgImFuZCBDb3B5Q29uc3RydWN0aWJsZSIgZnJvbSBwYXJhZ3JhcGhzIDEgYW5kIDQ8L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5EdXAgb2YgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI4MSI+MjgxPC9hPi48L3A+Cjxocj4KPGEgbmFtZT0iNDg3Ij48aDM+NDg3LiZuYnNwO0FsbG9jYXRvcjo6Y29uc3RydWN0IGlzIHRvbyBsaW1pdGluZzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuZGVmYXVsdC5jb24ucmVxIj4gW2xpYi5kZWZhdWx0LmNvbi5yZXFdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RocnV2IE1hdGFuaSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNyBPY3QgMjAwNDwvcD4KPHA+ClRoZSBzdGFuZGFyZCdzIHZlcnNpb24gb2YgYWxsb2NhdG9yOjpjb25zdHJ1Y3QocG9pbnRlciwKY29uc3RfcmVmZXJlbmNlKSBzZXZlcmVseSBsaW1pdHMgd2hhdCB5b3UgY2FuIGNvbnN0cnVjdCB1c2luZyB0aGlzCmZ1bmN0aW9uLiAgU2F5IHlvdSBjYW4gY29uc3RydWN0IGEgc29ja2V0IGZyb20gYSBmaWxlIGRlc2NyaXB0b3IuIE5vdywKdXNpbmcgdGhpcyBzeW50YXgsIEkgZmlyc3QgaGF2ZSB0byBtYW51YWxseSBjb25zdHJ1Y3QgYSBzb2NrZXQgZnJvbQp0aGUgZmQsIGFuZCB0aGVuIHBhc3MgdGhlIGNvbnN0cnVjdGVkIHNvY2tldCB0byB0aGUgY29uc3RydWN0KCkKZnVuY3Rpb24gc28gaXQgd2lsbCBqdXN0IHRvIGFuIHVuaW5pdGlhbGl6ZWQgY29weSBvZiB0aGUgc29ja2V0IEkKbWFudWFsbHkgY29uc3RydWN0ZWQuIE5vdyBpdCBtYXkgbm90IGFsd2F5cyBiZSBwb3NzaWJsZSB0byBjb3B5CmNvbnN0cnVjdCBhIHNvY2tldCBlaCEgU28sIEkgZmVlbCB0aGF0IHRoZSBjaGFuZ2VzIHNob3VsZCBnbyBpbiB0aGUKYWxsb2NhdG9yOjpjb25zdHJ1Y3QoKSwgbWFraW5nIGl0Ogo8L3A+CjxwcmU+ICAgIHRlbXBsYXRlJmx0O3R5cGVuYW1lIFQmZ3Q7CiAgICBzdHJ1Y3QgYWxsb2NhdG9yewogICAgICB0ZW1wbGF0ZSZsdDt0eXBlbmFtZSBUMSZndDsKICAgICAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBUMSBjb25zdCZhbXA7IHJ0MSk7CiAgICB9Owo8L3ByZT4KCjxwPgpOb3csIHRoZSBjdG9yIG9mIHRoZSBjbGFzcyBUIHdoaWNoIG1hdGNoZXMgdGhlIG9uZSB0aGF0IHRha2VzIGEgVDEgY2FuCmJlIGNhbGxlZCEgRG9lc24ndCB0aGF0IHNvdW5kIGdyZWF0Pwo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPk5BRC4gU1RMIHVzZXMgY29weWluZyBhbGwgdGhlIHRpbWUsIGFuZCBtYWtpbmcgaXQgcG9zc2libGUgZm9yCiAgYWxsb2NhdG9ycyB0byBjb25zdHJ1Y3Qgbm9uY29weWFibGUgb2JqZWN0cyBpcyB1c2VsZXNzIGluIHRoZQogIGFic2VuY2Ugb2YgY29ycmVzcG9uZGluZyBjb250YWluZXIgY2hhbmdlcy4gV2UgbWlnaHQgY29uc2lkZXIgdGhpcwogIGFzIHBhcnQgb2YgYSBsYXJnZXIgcmVkZXNpZ24gb2YgU1RMLjwvcD4KPGhyPgo8YSBuYW1lPSI0ODkiPjxoMz40ODkuJm5ic3A7c3RkOjpyZW1vdmUgLyBzdGQ6OnJlbW92ZV9pZiB3cm9uZ2x5IHNwZWNpZmllZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjIuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5yZW1vdmUiPiBbbGliLmFsZy5yZW1vdmVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1Rob21hcyBNYW5nJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEyIERlYyAyMDA0PC9wPgo8cD5JbiBTZWN0aW9uIDI1LjIuNyBbbGliLmFsZy5yZW1vdmVdLCBwYXJhZ3JhcGhzIDEgdG8gNSBkZXNjcmliZSB0aGUKYmVoYXZpb3Igb2YgdGhlIG11dGF0aW5nIHNlcXVlbmNlIG9wZXJhdGlvbnMgc3RkOjpyZW1vdmUgYW5kCnN0ZDo6cmVtb3ZlX2lmLiBIb3dldmVyLCB0aGUgd29yZGluZyBkb2VzIG5vdCByZWZsZWN0IHRoZSBpbnRlbmRlZApiZWhhdmlvciBbTm90ZTogU2VlIGRlZmluaXRpb24gb2YgaW50ZW5kZWQgYmVoYXZpb3IgYmVsb3ddIG9mIHRoZXNlCmFsZ29yaXRobXMsIGFzIGl0IGlzIGtub3duIHRvIHRoZSBDKysgY29tbXVuaXR5IFsxXS4KPC9wPgoKCgo8cD4xKSBBbmFseXNpcyBvZiBjdXJyZW50IHdvcmRpbmc6PC9wPgoKCjxwPjI1LjIuNyBbbGliLmFsZy5yZW1vdmVdLCBwYXJhZ3JhcGggMjo8L3A+Cgo8cD5DdXJyZW50IHdvcmRpbmcgc2F5czoKIkVmZmVjdHM6IEVsaW1pbmF0ZXMgYWxsIHRoZSBlbGVtZW50cyByZWZlcnJlZCB0byBieSBpdGVyYXRvciBpIGluIHRoZQpyYW5nZSBbZmlyc3QsIGxhc3QpIGZvciB3aGljaCB0aGUgZm9sbG93aW5nIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9ucwpob2xkOiAqaSA9PSB2YWx1ZSwgcHJlZCgqaSkgIT0gZmFsc2UuIjwvcD4KCjxwPgpUaGlzIHNlbnRlbmNlcyBleHByZXNzZXMgc3BlY2lmaWNhbGx5IHRoYXQgYWxsIGVsZW1lbnRzIGRlbm90ZWQgYnkgdGhlCihvcmlnaW5hbCkgcmFuZ2UgW2ZpcnN0LCBsYXN0KSBmb3Igd2hpY2ggdGhlIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9uCmhvbGQgd2lsbCBiZSBlbGltaW5hdGVkLiBTaW5jZSB0aGVyZSBpcyBubyBmb3JtYWwgZGVmaW5pdGlvbiBvZiB0aGUgdGVybQoiZWxpbWluYXRlIiBwcm92aWRlZCwgdGhlIG1lYW5pbmcgb2YgImVsaW1pbmF0ZSIgaW4gZXZlcnlkYXkgbGFuZ3VhZ2UKaW1wbGllcyB0aGF0IGFzIHBvc3Rjb25kaXRpb24sIG5vIGVsZW1lbnQgaW4gdGhlIHJhbmdlIGRlbm90ZWQgYnkKW2ZpcnN0LCBsYXN0KSB3aWxsIGhvbGQgdGhlIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9uIG9uIHJlaXRlcmF0aW9uIG92ZXIKdGhlIHJhbmdlIFtmaXJzdCwgbGFzdCkuCjwvcD4KCjxwPgpIb3dldmVyLCB0aGlzIGlzIG5laXRoZXIgdGhlIGludGVudCBbTm90ZTogU2VlIGRlZmluaXRpb24gb2YgaW50ZW5kZWQKYmVoYXZpb3IgYmVsb3ddIG5vciBhIGdlbmVyYWwgcG9zc2libGUgYXBwcm9hY2guIEl0IGNhbiBiZSBlYXNpbHkgcHJvdmVuCnRoYXQgaWYgYWxsIGVsZW1lbnRzIG9mIHRoZSBvcmlnaW5hbCByYW5nZVtmaXJzdCwgbGFzdCkgd2lsbCBob2xkIHRoZQpjb25kaXRpb24sIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBzdWJzdGl0dXRlIHRoZW0gYnkgYW4gZWxlbWVudCBmb3Igd2hpY2gKdGhlIGNvbmRpdGlvbiB3aWxsIG5vdCBob2xkLgo8L3A+CgoKPHA+MjUuMi43IFtsaWIuYWxnLnJlbW92ZV0sIHBhcmFncmFwaCAzOjwvcD4KCjxwPgpDdXJyZW50IHdvcmRpbmcgc2F5czoKIlJldHVybnM6IFRoZSBlbmQgb2YgdGhlIHJlc3VsdGluZyByYW5nZS4iCjwvcD4KCjxwPgpUaGUgcmVzdWx0aW5nIHJhbmdlIGlzIG5vdCBzcGVjaWZpZWQuIEluIGNvbWJpbmF0aW9uIHdpdGggMjUuMi43CltsaWIuYWxnLnJlbW92ZV0sIHBhcmFncmFwaCAyLCB0aGUgb25seSByZWFzb25hYmxlIGludGVycHJldGF0aW9uIG9mCnRoaXMgc28tY2FsbGVkIHJlc3VsdGluZyByYW5nZSBpcyB0aGUgcmFuZ2UgW2ZpcnN0LGxhc3QpIC0gdGh1cwpyZXR1cm5pbmcgYWx3YXlzIHRoZSBGb3J3YXJkSXRlcmF0b3IgJ2xhc3QnIHBhcmFtZXRlci4KPC9wPgoKCjxwPgoyNS4yLjcgW2xpYi5hbGcucmVtb3ZlXSwgcGFyYWdyYXBoIDQ6CjwvcD4KCjxwPgpDdXJyZW50IHdvcmRpbmcgc2F5czoKIk5vdGVzOiBTdGFibGU6IHRoZSByZWxhdGl2ZSBvcmRlciBvZiB0aGUgZWxlbWVudHMgdGhhdCBhcmUgbm90IHJlbW92ZWQKaXMgdGhlIHNhbWUgYXMgdGhlaXIgcmVsYXRpdmUgb3JkZXIgaW4gdGhlIG9yaWdpbmFsIHJhbmdlIgo8L3A+Cgo8cD4KVGhpcyBzZW50ZW5jZXMgbWFrZXMgdXNlIG9mIHRoZSB0ZXJtICJyZW1vdmVkIiwgd2hpY2ggaXMgbmVpdGhlcgpzcGVjaWZpZWQsIG5vciB1c2VkIGluIGEgcHJldmlvdXMgcGFyYWdyYXBoICh3aGljaCB1c2VzIHRoZSB0ZXJtCiJlbGltaW5hdGUiKSwgbm9yIHVuYW1naXVvdXNseSBzZXBhcmF0ZWQgZnJvbSB0aGUgbmFtZSBvZiB0aGUgYWxnb3JpdGhtLgo8L3A+CgoKPHA+MikgRGVzY3JpcHRpb24gb2YgaW50ZW5kZWQgYmVoYXZpb3I6PC9wPgoKPHA+CkZvciB0aGUgcmVzdCBvZiB0aGlzIERlZmVjdCBSZXBvcnQsIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgaW50ZW5kZWQKYmVoYXZpb3Igd2FzIHRoYXQgYWxsIGVsZW1lbnRzIG9mIHRoZSByYW5nZSBbZmlyc3QsIGxhc3QpIHdoaWNoIGRvIG5vdApob2xkIHRoZSBjb25kaXRpb24gKmkgPT0gdmFsdWUgKHN0ZDo6cmVtb3ZlKSBvciAgcHJlZCgqaSkgIT0gZmFsc2UKKHN0ZDo6cmVtb3ZlX2lmKV0sIGNhbGwgdGhlbSBzLWVsZW1lbnRzIFtOb3RlOiBzLi4uc3RheV0sIHdpbGwgYmUgcGxhY2VkCmludG8gYSBjb250aWd1b3VzIHN1YnJhbmdlIG9mIFtmaXJzdCwgbGFzdCksIGRlbm90ZWQgYnkgdGhlIGl0ZXJhdG9ycwpbZmlyc3QsIHJldHVybiB2YWx1ZSkuIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHJlc3VsdGluZyByYW5nZQpbZmlyc3QsIHJldHVybiB2YWx1ZSkgc2hhbGwgYmUgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBzLWVsZW1lbnRzIGluIHRoZQpvcmlnaW5hbCByYW5nZSBbZmlyc3QsIGxhc3QpLiBUaGUgcmVsYXRpdmUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzIGluIHRoZQpyZXN1bHRpbmcgc3VicmFuZ2VbZmlyc3QsIHJldHVybiB2YWx1ZSkgc2hhbGwgYmUgdGhlIHNhbWUgYXMgdGhlCnJlbGF0aXZlIG9yZGVyIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIGluIHRoZSBvcmlnaW5hbCByYW5nZS4gSXQKaXMgdW5kZWZpbmVkIHdoZXRoZXIgYW55IGVsZW1lbnRzIGluIHRoZSByZXN1bHRpbmcgc3VicmFuZ2UgW3JldHVybgp2YWx1ZSwgbGFzdCkgd2lsbCBob2xkIHRoZSBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbiwgb3Igbm90Lgo8L3A+Cgo8cD4KQWxsIGltcGxlbWVudGF0aW9ucyBrbm93biB0byB0aGUgYXV0aG9yIG9mIHRoaXMgRGVmZWN0IFJlcG9ydCBjb21wbHkKd2l0aCB0aGlzIGludGVudC4gU2luY2UgdGhlIGludGVudCAgb2YgdGhlIGJlaGF2aW9yIChjb250cmFyeSB0byB0aGUKY3VycmVudCB3b3JkaW5nKSBpcyBhbHNvIGRlc2NyaWJlZCBpbiB2YXJpb3VzIHV0aWxpdHkgcmVmZXJlbmNlcyBzZXJ2aW5nCnRoZSBDKysgY29tbXVuaXR5IFsxXSwgaXQgaXMgbm90IGV4cGVjdGVkIHRoYXQgZml4aW5nIHRoZSBwYXJhZ3JhcGhzCndpbGwgaW5mbHVlbmNlIGN1cnJlbnQgY29kZSAtIHVubGVzcyB0aGUgY29kZSByZWxpZXMgb24gdGhlIGJlaGF2aW9yIGFzCml0IGlzIGRlc2NyaWJlZCBieSBjdXJyZW50IHdvcmRpbmcgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBpbmRlZWQKcmVmbGVjdHMgdGhlIGN1cnJlbnQgd29yZGluZywgYW5kIG5vdCB0aGUgaW50ZW50Lgo8L3A+CgoKCjxwPjMpIFByb3Bvc2VkIGZpeGVzOjwvcD4KCgo8cD5DaGFuZ2UgMjUuMi43IFtsaWIuYWxnLnJlbW92ZV0sIHBhcmFncmFwaCAyIHRvOjwvcD4KCjxwPgoiRWZmZWN0OiBQbGFjZXMgYWxsIHRoZSBlbGVtZW50cyByZWZlcnJlZCB0byBieSBpdGVyYXRvciBpIGluIHRoZSByYW5nZQpbZmlyc3QsIGxhc3QpIGZvciB3aGljaCB0aGUgZm9sbG93aW5nIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9ucyBob2xkIDoKISgqaSA9PSB2YWx1ZSksIHByZWQoKmkpID09IGZhbHNlIGludG8gdGhlIHN1YnJhbmdlIFtmaXJzdCwgaykgb2YgdGhlCm9yaWdpbmFsIHJhbmdlLCB3aGVyZSBrIHNoYWxsIGRlbm90ZSBhIHZhbHVlIG9mIHR5cGUgRm9yd2FyZEl0ZXJhdG9yLiBJdAppcyB1bmRlZmluZWQgd2hldGhlciBhbnkgZWxlbWVudHMgaW4gdGhlIHJlc3VsdGluZyBzdWJyYW5nZSBbaywgbGFzdCkKd2lsbCBob2xkIHRoZSBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbiwgb3Igbm90LiIKPC9wPgoKPHA+Q29tbWVudHMgdG8gdGhlIG5ldyB3b3JkaW5nOjwvcD4KCjxwPgphKSAiUGxhY2VzIiBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nLCBhbmQgdGhlIGV2ZXJ5ZGF5IGxhbmd1YWdlIG1lYW5pbmcKc2hvdWxkIGZpdC4KYikgVGhlIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9ucyB3ZXJlIG5lZ2F0ZWQgY29tcGFyZWQgdG8gdGhlIGN1cnJlbnQKd29yZGluZywgYmVjYXVlIHRoZSBuZXcgd29yZGluZyByZXF1aXJlcyBpdC4KYykgVGhlIHdvcmRpbmcgIm9mIHRoZSBvcmlnaW5hbCByYW5nZSIgbWlnaHQgYmUgcmVkdW5kYW50LCBzaW5jZSBhbnkKc3VicmFuZ2Ugc3RhcnRpbmcgYXQgJ2ZpcnN0JyBhbmQgY29udGFpbmluZyBubyBtb3JlIGVsZW1lbnRzIHRoYW4gdGhlCm9yaWdpbmFsIHJhbmdlIGlzIGltcGxpY2l0bHkgYSBzdWJyYW5nZSBvZiB0aGUgb3JpZ2luYWwgcmFuZ2UgW2ZpcnN0LApsYXN0KS4KZCkgVGhlIGl0ZXJhdG9yIGsgd2FzIGludHJvZHVjZWQgaW5zdGVhZCBvZiAicmV0dXJuIHZhbHVlIiBpbiBvcmRlciB0bwphdm9pZCBhIGN5Y2xpYyBkZXBlbmRlbmN5IG9uIDI1LjIuNy8zLiBUaGUgd29yZGluZyAiLCB3aGVyZSBrIHNoYWxsCmRlbm90ZSBhIHZhbHVlIG9mIHR5cGUgRm9yd2FyZEl0ZXJhdG9yIiBtaWdodCBiZSByZWR1bmRhbnQsIGJlY2F1c2UgaXQKZm9sbG93cyBpbXBsaWNpdGx5IGJ5IDI1LjIuNy8zLgplKSAiUGxhY2VzIiBkb2VzLCBpbiB0aGUgYXV0aG9yJ3Mgb3BpbmlvbiwgZXhwbGljaXRseSBmb3JiaWQgZHVwbGljYXRpbmcKYW55IGVsZW1lbnQgaG9sZGluZyB0aGUgY29ycmVzcG9uZGluZyBjb25kaXRpb24gaW4gdGhlIG9yaWdpbmFsIHJhbmdlCltmaXJzdCwgbGFzdCkgd2l0aGluIHRoZSByZXN1bHRpbmcgcmFuZ2UgW2ZpcnN0LCBrKS4gSWYgdGhlcmUgaXMgZG91YnQKdGhpcyB0ZXJtIG1pZ2h0IGJlIG5vdCB1bmFtYmlndW91cyByZWdhcmRpbmcgdGhpcywgaXQgaXMgc3VnZ2VzdGVkIHRoYXQKayBpcyBzcGVjaWZpZWQgbW9yZSBjbG9zZWx5IGJ5IHRoZSBmb2xsb3dpbmcgd29yZGluZzogImsgc2hhbGwgZGVub3RlIGEKdmFsdWUgb2YgdHlwZSBGb3J3YXJkSXRlcmF0b3IgW05vdGU6IHNlZSBkKV0gc28gdGhhdCBrIC0gZmlyc3QgaXMgZXF1YWwKdG8gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgb3JpZ2luYWwgcmFuZ2UgW2ZpcnN0LCBsYXN0KSBmb3Igd2hpY2gKdGhlIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9uIGRpZCBob2xkIi4gVGhpcyBjb3VsZCBhbHNvIGJlIGV4cHJlc3NlZCBhcyBhCnNlcGFyYXRlIHBhcmFncmFwaCAiUG9zdGNvbmRpdGlvbjoiCmYpIFRoZSBzZW5jdGVuY2UgIkl0IGlzIHVuZGVmaW5lZCB3aGV0aGVyIGFueSBlbGVtZW50cyBpbiB0aGUgcmVzdWx0aW5nCnN1YnJhbmdlIFtrLCBsYXN0KSB3aWxsIGhvbGQgdGhlIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9uLCBvciBub3QuIiB3YXMKYWRkZWQgY29uc2Npb3VzbHkgc28gdGhlIHRlcm0gIlBsYWNlcyIgZG9lcyBub3QgaW1wbHkgaWYgdGhlIG9yaWdpbmFsCnJhbmdlIFtmaXJzdCwgbGFzdCkgY29udGFpbnMgbiBlbGVtZW50cyBob2xkaW5nIHRoZSBjb3JyZXNwb25kaW5nCmNvbmRpdGlvbiwgdGhlIGlkZW50aWNhbCByYW5nZVtmaXJzdCwgbGFzdCkgd2lsbCBhbHNvIGNvbnRhaW4gZXhhY3RseSBuCmVsZW1lbnRzIGhvbGRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9uIGFmdGVyIGFwcGxpY2F0aW9uIG9mIHRoZQphbGdvcml0aG0uCjwvcD4KCjxwPgpDaGFuZ2UgMjUuMi43IFtsaWIuYWxnLnJlbW92ZV0sIHBhcmFncmFwaCAzIHRvOgoKIlJldHVybnM6IFRoZSBpdGVyYXRvciBrLiIKPC9wPgoKPHA+CkNoYW5nZSAyNS4yLjcgW2xpYi5hbGcucmVtb3ZlXSwgcGFyYWdyYXBoIDQgdG86CgoiTm90ZXM6IFN0YWJsZTogdGhlIHJlbGF0aXZlIG9yZGVyIG9mIHRoZSBlbGVtZW50cyB0aGF0IGFyZSBwbGFjZWQgaW50bwp0aGUgc3VicmFuZ2UgW2ZpcnN0LCByZXR1cm4gdmFsdWUpIHNoYWxsIGJlIHRoZSBzYW1lIGFzIHRoZWlyIHJlbGF0aXZlCm9yZGVyIHdhcyBpbiB0aGUgb3JpZ2luYWwgcmFuZ2UgW2ZpcnN0LCBsYXN0KSBwcmlvciB0byBhcHBsaWNhdGlvbiBvZgp0aGUgYWxnb3JpdGhtLiIKPC9wPgoKPHA+CkNvbW1lbnRzIHRvIHRoZSBuZXcgd29yZGluZzoKPC9wPgoKPHA+CmEpIHRoZSB3b3JkaW5nICJ3YXMgLi4uICBwcmlvciB0byBhcHBsaWNhdGlvbiBvZiB0aGUgYWxnb3JpdGhtIiBpcyB1c2VkCnRvIGV4cGxpY2l0bHkgZGlzdGluZ3Vpc2ggdGhlIG9yaWdpbmFsIHJhbmdlIG5vdCBvbmx5IGJ5IG1lYW5zIG9mCml0ZXJhdG9ycywgYnV0IGFsc28gYnkgYSAnY2hyb25vbG9naWNhbCcgZmFjdG9yIGZyb20gdGhlIHJlc3VsdGluZyByYW5nZQpbZmlyc3QsIHJldHVybiB2YWx1ZSkuIEl0IG1pZ2h0IGJlIHJlZHVuZGFudC4KPC9wPgoKPHA+ClsxXToKVGhlIHdvcmRpbmcgb2YgdGhlc2UgcmVmZXJlbmNlcyBpcyBub3QgYWx3YXlzIHVuYW1iaWd1b3VzLCBhbmQgcHJvdmlkZWQKZXhhbXBsZXMgcGFydGlhbGx5IGNvbnRyYWRpY3QgdmVyYmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBhbGdvcml0aG1zLApiZWNhdXNlIHRoZSB2ZXJiYWwgZGVzY3JpcHRpb24gcmVzZW1ibGVzIHRoZSBwcm9ibGVtYXRpYyB3b3JkaW5nIG9mCklTTy9JRUMgMTQ4ODI6MjAwMy4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGJlbGlldmVzIHRoYXQgdGhlIHN0YW5kYXJkIGlzIHN1ZmZpY2llbnRseSBjbGVhciwgYW5kIHRoYXQKICB0aGVyZSBpcyBubyBldmlkZW5jZSBvZiBhbnkgcmVhbC13b3JsZCBjb25mdXNpb24gYWJvdXQgdGhpcyBwb2ludC48L3A+Cjxocj4KPGEgbmFtZT0iNDkwIj48aDM+NDkwLiZuYnNwO3N0ZDo6dW5pcXVlIHdyb25nbHkgc3BlY2lmaWVkPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMi44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLnVuaXF1ZSI+IFtsaWIuYWxnLnVuaXF1ZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7VGhvbWFzIE1hbmcmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTIgRGVjIDIwMDQ8L3A+CjxwPkluIFNlY3Rpb24gMjUuMi44IFtsaWIuYWxnLnVuaXF1ZV0sIHBhcmFncmFwaHMgMSB0byAzIGRlc2NyaWJlIHRoZQpiZWhhdmlvciBvZiB0aGUgbXV0YXRpbmcgc2VxdWVuY2Ugb3BlcmF0aW9uIHN0ZDo6dW5pcXVlLiBIb3dldmVyLCB0aGUKd29yZGluZyBkb2VzIG5vdCByZWZsZWN0IHRoZSBpbnRlbmRlZCBiZWhhdmlvciBbTm90ZTogU2VlIGRlZmluaXRpb24gb2YKaW50ZW5kZWQgYmVoYXZpb3IgYmVsb3ddIG9mIHRoZXNlIGFsZ29yaXRobXMsIGFzIGl0IGlzIGtub3duIHRvIHRoZSBDKysKY29tbXVuaXR5IFsxXS48L3A+CgoKCjxwPjEpIEFuYWx5c2lzIG9mIGN1cnJlbnQgd29yZGluZzo8L3A+CgoKPHA+MjUuMi44IFtsaWIuYWxnLnVuaXF1ZV0sIHBhcmFncmFwaCAxOjwvcD4KCjxwPgpDdXJyZW50IHdvcmRpbmcgc2F5czoKIkVmZmVjdHM6IEVsaW1pbmF0ZXMgYWxsIGJ1dCB0aGUgZmlyc3QgZWxlbWVudCBmcm9tIGV2ZXJ5IGNvbnNlY3V0aXZlCmdyb3VwIG9mIGVxdWFsIGVsZW1lbnRzIHJlZmVycmVkIHRvIGJ5IHRoZSBpdGVyYXRvciBpIGluIHRoZSByYW5nZQpbZmlyc3QsIGxhc3QpIGZvciB3aGljaCB0aGUgZm9sbG93aW5nIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9ucyBob2xkOiAqaQo9PSAqKGkgLSAxKSBvciBwcmVkKCppLCAqKGkgLTEpKSAhPSBmYWxzZSIKPC9wPgoKPHA+ClRoaXMgc2VudGVuY2VzIGV4cHJlc3NlcyBzcGVjaWZpY2FsbHkgdGhhdCBhbGwgZWxlbWVudHMgZGVub3RlZCBieSB0aGUKKG9yaWdpbmFsKSByYW5nZSBbZmlyc3QsIGxhc3QpIHdoaWNoIGFyZSBub3QgYnV0IHRoZSBmaXJzdCBlbGVtZW50IGZyb20KYSBjb25zZWN1dGl2ZSBncm91cCBvZiBlcXVhbCBlbGVtZW50cyAod2hlcmUgZXF1YWxpdHkgaXMgZGVmaW5lZCBhcyAqaQo9PSAqKGkgLSAxKSBvciBwcmVkKCppLCAqKGkgLSAxKSkgISA9IGZhbHNlKSBbTm90ZTogU2VlIERSIDIwMl0sIGNhbGwKdGhlbSByLWVsZW1lbnRzIFtOb3RlOiByLi4ucmVtb3ZlXSwgd2lsbCBiZSBlbGltaW5hdGVkLiBTaW5jZSB0aGVyZSBpcwpubyBmb3JtYWwgZGVmaW5pdGlvbiBvZiB0aGUgdGVybSAiZWxpbWluYXRlIiBwcm92aWRlZCwgaXQgaXMgdW5kZWZpbmVkCmhvdyB0aGlzICJlbGltaW5hdGlvbiIgdGFrZXMgcGxhY2UuIEJ1dCB0aGUgbWVhbmluZyBvZiAiZWxpbWluYXRlIiBpbgpldmVyeWRheSBsYW5ndWFnZSBzZWVtcyB0byBkaXNhbGxvdyBleHBsaWNpdGx5IHRoYXQgYWZ0ZXIgYXBwbGljYXRpb24gb2YKdGhlIGFsZ29yaXRobSwgYW55IHItZWxlbWVudCB3aWxsIHJlbWFpbiBhdCBhbnkgcG9zaXRpb24gb2YgdGhlIHJhbmdlCltmaXJzdCwgbGFzdCkgWzJdLgo8L3A+Cgo8cD4KQW5vdGhlciBkZWZlY3QgaW4gdGhlIGN1cnJlbnQgd29yZGluZyBjb25jZXJucyB0aGUgaXRlcmF0b3JzIHVzZWQgdG8KY29tcGFyZSB0d28gZWxlbWVudHMgZm9yIGVxdWFsaXR5OiBUaGUgY3VycmVudCB3b3JkaW5nIGNvbnRhaW5zIHRoZQpleHByZXNzaW9uICIoaSAtIDEpIiwgd2hpY2ggaXMgbm90IGNvdmVyZWQgYnkgMjUvOSBbTm90ZTogU2VlIERSCnN1Ym1pdHRlZCBieSBUaG9tYXMgTWFuZyByZWdhcmRpbmcgaW52YWxpZCBpdGVyYXRvciBhcml0aG1ldGljCmV4cHJlc3Npb25zXS4KPC9wPgoKCjxwPgoyNS4yLjggW2xpYi5hbGcudW5pcXVlXSwgcGFyYWdyYXBoIDI6CjwvcD4KPHA+Q3VycmVudCB3b3JkaW5nIHNheXM6CiJSZXR1cm5zOiBUaGUgZW5kIG9mIHRoZSByZXN1bHRpbmcgcmFuZ2UuIjwvcD4KCjxwPgpUaGUgcmVzdWx0aW5nIHJhbmdlIGlzIG5vdCBzcGVjaWZpZWQuIEluIGNvbWJpbmF0aW9uIHdpdGggMjUuMi44CltsaWIuYWxnLnVuaXF1ZV0sIHBhcmFncmFwaCAxLCBvbmUgcmVhc29uYWJsZSBpbnRlcnByZXRhdGlvbiAoaW4gdGhlCmF1dGhvcidzIG9waW5pb24gZXZlbiB0aGUgb25seSBwb3NzaWJsZSBpbnRlcnByZXRhdGlvbikgb2YgdGhpcwpzby1jYWxsZWQgcmVzdWx0aW5nIHJhbmdlIGlzIHRoZSByYW5nZSBbZmlyc3QsIGxhc3QpIC0gdGh1cyByZXR1cm5pbmcKYWx3YXlzIHRoZSBGb3J3YXJkSXRlcmF0b3IgJ2xhc3QnIHBhcmFtZXRlci4KPC9wPgoKPHA+MikgRGVzY3JpcHRpb24gb2YgaW50ZW5kZWQgYmVoYXZpb3I6PC9wPgoKPHA+CkZvciB0aGUgcmVzdCBvZiB0aGlzIERlZmVjdCBSZXBvcnQsIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgaW50ZW5kZWQKYmVoYXZpb3Igd2FzIHRoYXQgYWxsIGVsZW1lbnRzIGRlbm90ZWQgYnkgdGhlIG9yaWdpbmFsIHJhbmdlIFtmaXJzdCwKbGFzdCkgd2hpY2ggYXJlIHRoZSBmaXJzdCBlbGVtZW50IGZyb20gYSBjb25zZWN1dGl2ZSBncm91cCBvZiBlbGVtZW50cwpmb3Igd2hpY2ggdGhlIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9uczogKihpLTEpID09ICppIChmb3IgdGhlIHZlcnNpb24gb2YKdW5pcXVlIHdpdGhvdXQgYSBwcmVkaWNhdGUgYXJndW1lbnQpIG9yIHByZWQoKihpLTEpLCAqaSkgISA9IGZhbHNlIChmb3IKdGhlIHZlcnNpb24gb2YgdW5pcXVlIHdpdGggYSBwcmVkaWNhdGUgYXJndW1lbnQpIFtOb3RlOiBJZiBzdWNoIGEgZ3JvdXAKb2YgZWxlbWVudHMgY29uc2lzdHMgb2Ygb25seSBhIHNpbmdsZSBlbGVtZW50LCB0aGlzIGlzIGFsc28gY29uc2lkZXJlZAp0aGUgZmlyc3QgZWxlbWVudF0gW05vdGU6IFNlZSByZXNvbHV0aW9ucyBvZiBEUiAyMDJdLCBjYWxsIHRoZW0Kcy1lbGVtZW50cyBbTm90ZTogcy4uLnN0YXldLCB3aWxsIGJlIHBsYWNlZCBpbnRvIGEgY29udGlndW91cyBzdWJyYW5nZQpvZiBbZmlyc3QsIGxhc3QpLCBkZW5vdGVkIGJ5IHRoZSBpdGVyYXRvcnMgW2ZpcnN0LCByZXR1cm4gdmFsdWUpLiBUaGUKbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSByZXN1bHRpbmcgcmFuZ2UgW2ZpcnN0LCByZXR1cm4gdmFsdWUpIHNoYWxsIGJlCmVxdWFsIHRvIHRoZSBudW1iZXIgb2Ygcy1lbGVtZW50cyBpbiB0aGUgb3JpZ2luYWwgcmFuZ2UgW2ZpcnN0LCBsYXN0KS4KSW52YWxpZCBpdGVyYXRvciBhcml0aG1ldGljIGV4cHJlc3Npb25zIGFyZSBleHBlY3RlZCB0byBiZSByZXNvbHZlZCBhcwpwcm9wb3NlZCBpbiBEUiBzdWJtaXR0ZWQgYnkgVGhvbWFzIE1hbmcgcmVnYXJkaW5nIGludmFsaWQgaXRlcmF0b3IKYXJpdGhtZXRpYyBleHByZXNzaW9ucy4gSXQgaXMgYWxzbyBhc3N1bWVkIGJ5IHRoZSBhdXRob3IgdGhhdCB0aGUKcmVsYXRpdmUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSByZXN1bHRpbmcgc3VicmFuZ2UgW2ZpcnN0LCByZXR1cm4KdmFsdWUpIHNoYWxsIGJlIHRoZSBzYW1lIGFzIHRoZSByZWxhdGl2ZSBvcmRlciBvZiB0aGUgY29ycmVzcG9uZGluZwplbGVtZW50cyAodGhlIHMtZWxlbWVudHMpIGluIHRoZSBvcmlnaW5hbCByYW5nZSBbTm90ZTogSWYgdGhpcyB3YXMgbm90CmludGVuZGVkIGJlaGF2aW9yLCB0aGUgYWRkaXRpb25hbCBwcm9wb3NlZCBwYXJhZ3JhcGggYWJvdXQgc3RhYmxlIG9yZGVyCndpbGwgY2VydGFpbmx5IGJlY29tZSBvYnNvbGV0ZV0uCkZ1cnRoZXJtb3JlLCB0aGUgcmVzb2x1dGlvbnMgb2YgRFIgMjAyIGFyZSBwYXJ0aWFsbHkgY29uc2lkZXJlZC4KPC9wPgoKPHA+CkFsbCBpbXBsZW1lbnRhdGlvbnMga25vd24gdG8gdGhlIGF1dGhvciBvZiB0aGlzIERlZmVjdCBSZXBvcnQgY29tcGx5CndpdGggdGhpcyBpbnRlbnQgW05vdGU6IEV4Y2VwdCBwb3NzaWJsZSBlZmZlY3RzIG9mIERSIDIwMl0uIFNpbmNlIHRoaXMKaW50ZW50IG9mIHRoZSBiZWhhdmlvciAoY29udHJhcnkgdG8gdGhlIGN1cnJlbnQgd29yZGluZykgaXMgYWxzbwpkZXNjcmliZWQgaW4gdmFyaW91cyB1dGlsaXR5IHJlZmVyZW5jZXMgc2VydmluZyB0aGUgQysrIGNvbW11bml0eSBbMV0sCml0IGlzIG5vdCBleHBlY3RlZCB0aGF0IGZpeGluZyB0aGUgcGFyYWdyYXBocyB3aWxsIGluZmx1ZW5jZSBjdXJyZW50CmNvZGUgW05vdGU6IEV4Y2VwdCBwb3NzaWJsZSBlZmZlY3RzIG9mIERSIDIwMl0gLSB1bmxlc3MgdGhlIGNvZGUgcmVsaWVzCm9uIHRoZSBiZWhhdmlvciBhcyBpdCBpcyBkZXNjcmliZWQgYnkgY3VycmVudCB3b3JkaW5nIGFuZCB0aGUKaW1wbGVtZW50YXRpb24gaW5kZWVkIHJlZmxlY3RzIHRoZSBjdXJyZW50IHdvcmRpbmcsIGFuZCBub3QgdGhlIGludGVudC4KPC9wPgoKCgo8cD4zKSBQcm9wb3NlZCBmaXhlczo8L3A+Cgo8cD4KQ2hhbmdlIDI1LjIuOCBbbGliLmFsZy51bmlxdWVdLCBwYXJhZ3JhcGggMSB0bzoKPC9wPgoKPHA+CiJFZmZlY3Q6IFBsYWNlcyB0aGUgZmlyc3QgZWxlbWVudCBmcm9tIGV2ZXJ5IGNvbnNlY3V0aXZlIGdyb3VwIG9mCmVsZW1lbnRzLCByZWZlcnJlZCB0byBieSB0aGUgaXRlcmF0b3IgaSBpbiB0aGUgcmFuZ2UgW2ZpcnN0LCBsYXN0KSwgZm9yCndoaWNoIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBob2xkOiAqKGktMSkgPT0gKmkgKGZvciB0aGUgdmVyc2lvbiBvZgp1bmlxdWUgd2l0aG91dCBhIHByZWRpY2F0ZSBhcmd1bWVudCkgb3IgcHJlZCgqKGkgLTEpLCAqaSkgIT0gZmFsc2UgKGZvcgp0aGUgdmVyc2lvbiBvZiB1bmlxdWUgd2l0aCBhIHByZWRpY2F0ZSBhcmd1bWVudCksIGludG8gdGhlIHN1YnJhbmdlCltmaXJzdCwgaykgb2YgdGhlIG9yaWdpbmFsIHJhbmdlLCB3aGVyZSBrIHNoYWxsIGRlbm90ZSBhIHZhbHVlIG9mIHR5cGUKRm9yd2FyZEl0ZXJhdG9yLiIKPC9wPgoKPHA+Q29tbWVudHMgdG8gdGhlIG5ldyB3b3JkaW5nOjwvcD4KCjxwPgphKSBUaGUgbmV3IHdvcmRpbmcgd2FzIGluZmx1ZW5jZWQgYnkgdGhlIHJlc29sdXRpb25zIG9mIERSIDIwMi4gSWYgRFIKMjAyIGlzIHJlc29sdmVkIGluIGFub3RoZXIgd2F5LCB0aGUgcHJvcG9zZWQgd29yZGluZyBuZWVkIGFsc28KYWRkaXRpb25hbCByZXZpZXcuCmIpICJQbGFjZXMiIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcsIGFuZCB0aGUgZXZlcnlkYXkgbGFuZ3VhZ2UgbWVhbmluZwpzaG91bGQgZml0LgpjKSBUaGUgZXhwcmVzc2lvbiAiKGkgLSAxKSIgd2FzIGxlZnQsIGJ1dCBpcyBleHBlY3RlZCB0aGF0IERSIHN1Ym1pdHRlZApieSBUaG9tYXMgTWFuZyByZWdhcmRpbmcgaW52YWxpZCBpdGVyYXRvciBhcml0aG1ldGljIGV4cHJlc3Npb25zIHdpbGwKdGFrZSB0aGlzIGludG8gYWNjb3VudC4KZCkgVGhlIHdvcmRpbmcgIihmb3IgdGhlIHZlcnNpb24gb2YgdW5pcXVlIHdpdGhvdXQgYSBwcmVkaWNhdGUKYXJndW1lbnQpIiBhbmQgIihmb3IgdGhlIHZlcnNpb24gb2YgdW5pcXVlIHdpdGggYSBwcmVkaWNhdGUgYXJndW1lbnQpIgp3YXMgYWRkZWQgY29uc2Npb3VzbHkgZm9yIGNsYXJpdHkgYW5kIGlzIGluIHJlc2VtYmxlbmNlIHdpdGggY3VycmVudAoyMy4yLjIuNCBbbGliLmxpc3Qub3BzXSwgcGFyYWdyYXBoIDE5LiBJdCBtaWdodCBiZSBjb25zaWRlcmVkIHJlZHVuZGFudC4KZSkgVGhlIHdvcmRpbmcgIm9mIHRoZSBvcmlnaW5hbCByYW5nZSIgbWlnaHQgYmUgcmVkdW5kYW50LCBzaW5jZSBhbnkKc3VicmFuZ2Ugc3RhcnRpbmcgYXQgZmlyc3QgYW5kIGNvbnRhaW5pbmcgbm8gbW9yZSBlbGVtZW50cyB0aGFuIHRoZQpvcmlnaW5hbCByYW5nZSBpcyBpbXBsaWNpdGx5IGEgc3VicmFuZ2Ugb2YgdGhlIG9yaWdpbmFsIHJhbmdlIFtmaXJzdCwKbGFzdCkuCmYpIFRoZSBpdGVyYXRvciBrIHdhcyBpbnRyb2R1Y2VkIGluc3RlYWQgb2YgInJldHVybiB2YWx1ZSIgaW4gb3JkZXIgdG8KYXZvaWQgYSBjeWNsaWMgZGVwZW5kZW5jeSBvbiAyNS4yLjggW2xpYi5hbGcudW5pcXVlXSwgcGFyYWdyYXBoIDIuIFRoZQp3b3JkaW5nICIsIHdoZXJlIGsgc2hhbGwgZGVub3RlIGEgdmFsdWUgb2YgdHlwZSBGb3J3YXJkSXRlcmF0b3IiIG1pZ2h0CmJlIHJlZHVuZGFudCwgYmVjYXVzZSBpdCBmb2xsb3dzIGltcGxpY2l0bHkgYnkgMjUuMi44IFtsaWIuYWxnLnVuaXF1ZV0sCnBhcmFncmFwaCAyLgpnKSAiUGxhY2VzIiBkb2VzLCBpbiB0aGUgYXV0aG9yJ3Mgb3BpbmlvbiwgZXhwbGljaXRseSBmb3JiaWQgZHVwbGljYXRpbmcKYW55IHMtZWxlbWVudCBpbiB0aGUgb3JpZ2luYWwgcmFuZ2UgW2ZpcnN0LCBsYXN0KSB3aXRoaW4gdGhlIHJlc3VsdGluZwpyYW5nZSBbZmlyc3QsIGspLiBJZiB0aGVyZSBpcyBkb3VidCB0aGlzIHRlcm0gbWlnaHQgYmUgbm90IHVuYW1iaWd1b3VzCnJlZ2FyZGluZyB0aGlzLCBpdCBpcyBzdWdnZXN0ZWQgdGhhdCBrIGlzIHNwZWNpZmllZCBtb3JlIGNsb3NlbHkgYnkgdGhlCmZvbGxvd2luZyB3b3JkaW5nOiAiayBzaGFsbCBkZW5vdGUgYSB2YWx1ZSBvZiB0eXBlIEZvcndhcmRJdGVyYXRvcgpbTm90ZTogU2VlIGYpXSBzbyB0aGF0IGsgLSBmaXJzdCBpcyBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluCnRoZSBvcmlnaW5hbCByYW5nZSBbZmlyc3QsIGxhc3QpIGJlaW5nIHRoZSBmaXJzdCBlbGVtZW50IGZyb20gZXZlcnkKY29uc2VjdXRpdmUgZ3JvdXAgb2YgZWxlbWVudHMgZm9yIHdoaWNoIHRoZSBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbiBkaWQKaG9sZCIuIFRoaXMgY291bGQgYWxzbyBiZSBleHByZXNzZWQgYXMgYSBzZXBhcmF0ZSBwYXJhZ3JhcGgKIlBvc3Rjb25kaXRpb246Ii4KaCkgSWYgaXQgaXMgY29uc2lkZXJlZCB0aGF0IHRoZSB3b3JkaW5nIGlzIHVuY2xlYXIgd2hldGhlciBpdCBkZWNsYXJlcwp0aGUgZWxlbWVudCBvZiBhIGdyb3VwIHdoaWNoIGNvbnNpc3RzIG9mIG9ubHkgYSBzaW5nbGUgZWxlbWVudAppbXBsaWNpdGx5IHRvIGJlIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoaXMgZ3JvdXAgW05vdGU6IFN1Y2ggYW4KaW50ZXJwcmV0YXRpb24gY291bGQgZXZlbnR1YWxseSBhcmlzZSBlc3BlY2lhbGx5IGluIGNhc2UgbGFzdCAtIGZpcnN0ID09CjFdICwgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIHNlbnRlbmNlIGlzIHByb3Bvc2VkOiAiSWYgc3VjaCBhIGdyb3VwIG9mCmVsZW1lbnRzIGNvbnNpc3RzIG9mIG9ubHkgYSBzaW5nbGUgZWxlbWVudCwgdGhpcyBlbGVtZW50IGlzIGFsc28KY29uc2lkZXJlZCB0aGUgZmlyc3QgZWxlbWVudC4iCjwvcD4KCjxwPgpDaGFuZ2UgMjUuMi44IFtsaWIuYWxnLnVuaXF1ZV0sIHBhcmFncmFwaCAyIHRvOgoiUmV0dXJuczogVGhlIGl0ZXJhdG9yIGsuIgo8L3A+Cgo8cD4KQWRkIGEgc2VwYXJhdGUgcGFyYWdyYXBoICJOb3RlczoiIGFzIDI1LjIuOCBbbGliLmFsZy51bmlxdWVdLCBwYXJhZ3JhcGgKMmEgb3IgM2EsIG9yIGEgc2VwYXJhdGUgcGFyYWdyYXBoICJQb3N0Y29uZGl0aW9uOiIgYmVmb3JlIDI1LjIuOApbbGliLmFsZy51bmlxdWVdLCBwYXJhZ3JhcGggMiAod29yZGluZyBpbnNpZGUge30gc2hhbGwgYmUgZWxpbWluYXRlZCBpZgp0aGUgcHJlY2VkaW5nIGV4cHJlc3Npb25zIGFyZSB1c2VkLCBvciB0aGUgcHJlY2VkaW5nIGV4cHJlc3Npb25zIHNoYWxsCmJlIGVsaW1pbmF0ZWQgaWYgd29yZGluZyBpbnNpZGUge30gaXMgdXNlZCk6CjwvcD4KCjxwPgoiTm90ZXM6e1Bvc3Rjb25kaXRpb246fSBTdGFibGU6IHRoZSByZWxhdGl2ZSBvcmRlciBvZiB0aGUgZWxlbWVudHMgdGhhdAphcmUgcGxhY2VkIGludG8gdGhlIHN1YnJhbmdlIFtmaXJzdCwgcmV0dXJuIHZhbHVlIHtrfSkgc2hhbGwgYmUgdGhlIHNhbWUKYXMgdGhlaXIgcmVsYXRpdmUgb3JkZXIgd2FzIGluIHRoZSBvcmlnaW5hbCByYW5nZSBbZmlyc3QsIGxhc3QpIHByaW9yIHRvCmFwcGxpY2F0aW9uIG9mIHRoZSBhbGdvcml0aG0uIgo8L3A+Cgo8cD5Db21tZW50cyB0byB0aGUgbmV3IHdvcmRpbmc6PC9wPgoKPHA+CmEpIEl0IGlzIGFzc3VtZWQgYnkgdGhlIGF1dGhvciB0aGF0IHRoZSBhbGdvcml0aG0gd2FzIGludGVuZGVkIHRvIGJlCnN0YWJsZS4KSW4gY2FzZSB0aGlzIHdhcyBub3QgdGhlIGludGVudCwgdGhpcyBwYXJhZ3JhcGggYmVjb21lcyBjZXJ0YWlubHkKb2Jzb2xldGUuCmIpIFRoZSB3b3JkaW5nICJ3YXMgLi4uICBwcmlvciB0byBhcHBsaWNhdGlvbiBvZiB0aGUgYWxnb3JpdGhtIiBpcyB1c2VkCnRvIGV4cGxpY2l0bHkgZGlzdGluZ3Vpc2ggdGhlIG9yaWdpbmFsIHJhbmdlIG5vdCBvbmx5IGJ5IG1lYW5zIG9mCml0ZXJhdG9ycywgYnV0IGFsc28gYnkgYSAnY2hyb25vbG9naWNhbCcgZmFjdG9yIGZyb20gdGhlIHJlc3VsdGluZyByYW5nZQpbZmlyc3QsIHJldHVybiB2YWx1ZSkuIEl0IG1pZ2h0IGJlIHJlZHVuZGFudC4KPC9wPgoKPHA+CjI1LjIuOCBbbGliLmFsZy51bmlxdWVdLCBwYXJhZ3JhcGggMzoKPC9wPgo8cD5TZWUgRFIgMjM5LjwvcD4KCjxwPgo0KSBSZWZlcmVuY2VzIHRvIG90aGVyIERSczoKPC9wPgoKPHA+ClNlZSBEUiAyMDIsIGJ1dCB3aGljaCBkb2VzIG5vdCBhZGRyZXNzIGFueSBvZiB0aGUgcHJvYmxlbXMgZGVzY3JpYmVkIGluCnRoaXMgRGVmZWN0IFJlcG9ydCBbTm90ZTogVGhpcyBEUiBpcyBzdXBwb3NlZCB0byBjb21wbGVtZW50IERSIDIwMl0uClNlZSBEUiAyMzkuClNlZSBEUiBzdWJtaXR0ZWQgYnkgVGhvbWFzIE1hbmcgcmVnYXJkaW5nIGludmFsaWQgaXRlcmF0b3IgYXJpdGhtZXRpYwpleHByZXNzaW9ucy4KPC9wPgoKPHA+ClsxXToKVGhlIHdvcmRpbmcgb2YgdGhlc2UgcmVmZXJlbmNlcyBpcyBub3QgYWx3YXlzIHVuYW1iaWd1b3VzLCBhbmQgcHJvdmlkZWQKZXhhbXBsZXMgcGFydGlhbGx5IGNvbnRyYWRpY3QgdmVyYmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBhbGdvcml0aG1zLApiZWNhdXNlIHRoZSB2ZXJiYWwgZGVzY3JpcHRpb24gcmVzZW1ibGVzIHRoZSBwcm9ibGVtYXRpYyB3b3JkaW5nIG9mCklTTy9JRUMgMTQ4ODI6MjAwMy4KPC9wPgoKPHA+ClsyXToKSWxsdXN0cmF0aW9uIG9mIGNvbmZvcm1pbmcgaW1wbGVtZW50YXRpb25zIGFjY29yZGluZyB0byBjdXJyZW50IHdvcmRpbmc6CjwvcD4KCjxwPgpPbmUgd2F5IHRoZSBhdXRob3Igb2YgdGhpcyBEUiBjb25zaWRlcnMgaG93IHRoaXMgImVsaW1pbmF0aW9uIiBjb3VsZCBiZQphY2hpZXZlZCBieSBhIGNvbmZvcm1pbmcgaW1wbGVtZW50YXRpb24gYWNjb3JkaW5nIHRvIGN1cnJlbnQgd29yZGluZyBpcwpieSBzdWJzdGl0dXRpbmcgZWFjaCByLWVsZW1lbnQgYnkgX2FueV8gcy1lbGVtZW50IFtOb3RlOiBzLi4uc3RheTsgYW55Cm5vbi1yLWVsZW1lbnRdLCBzaW5jZSBhbGwgci1lbGVtZW50cyBhcmUgImVsaW1pbmF0ZWQiLgo8L3A+Cgo8cD4KSW4gY2FzZSBvZiBhIHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgZWxlbWVudHMgYmVpbmcgYWxsICdlcXVhbCcgW05vdGU6ClNlZSBEUiAyMDJdLCBzdWJzdGl0dXRpbmcgZWFjaCByLWVsZW1lbnQgYnkgdGhlIHNpbmdsZSBzLWVsZW1lbnQgaXMgdGhlCm9ubHkgcG9zc2libGUgc29sdXRpb24gYWNjb3JkaW5nIHRvIGN1cnJlbnQgd29yZGluZy4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGJlbGlldmVzIHRoZSBzdGFuZGFyZCBpcyBzdWZmaWNpZW50bHkgY2xlYXIuIE5vCmltcGxlbWVudGVycyBnZXQgaXQgd3JvbmcsIGFuZCBjaGFuZ2luZyBpdCB3b3VsZG4ndCBjYXVzZSBhbnkgY29kZSB0bwpjaGFuZ2UsIHNvIHRoZXJlIGlzIG5vIHJlYWwtd29ybGQgaGFybSBoZXJlLjwvcD4KPGhyPgo8YSBuYW1lPSI0OTEiPjxoMz40OTEuJm5ic3A7c3RkOjpsaXN0Jmx0OyZndDs6OnVuaXF1ZSBpbmNvcnJlY3RseSBzcGVjaWZpZWQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4yLjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmRlcXVlLnNwZWNpYWwiPiBbbGliLmRlcXVlLnNwZWNpYWxdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1Rob21hcyBNYW5nJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEyIERlYyAyMDA0PC9wPgo8cD5JbiBTZWN0aW9uIDIzLjIuMi40IFtsaWIubGlzdC5vcHNdLCBwYXJhZ3JhcGhzIDE5IHRvIDIxIGRlc2NyaWJlIHRoZQpiZWhhdmlvciBvZiB0aGUgc3RkOjpsaXN0Jmx0O1QsIEFsbG9jYXRvciZndDs6OnVuaXF1ZSBvcGVyYXRpb24uIEhvd2V2ZXIsIHRoZQpjdXJyZW50IHdvcmRpbmcgaXMgZGVmZWN0aXZlIGZvciB2YXJpb3VzIHJlYXNvbnMuPC9wPgoKCgo8cD4KMSkgQW5hbHlzaXMgb2YgY3VycmVudCB3b3JkaW5nOgo8L3A+Cgo8cD4yMy4yLjIuNCBbbGliLmxpc3Qub3BzXSwgcGFyYWdyYXBoIDE5OjwvcD4KCjxwPgpDdXJyZW50IHdvcmRpbmcgc2F5czoKIkVmZmVjdHM6ICBFbGltaW5hdGVzIGFsbCBidXQgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBldmVyeSBjb25zZWN1dGl2ZQpncm91cCBvZiBlcXVhbCBlbGVtZW50cyByZWZlcnJlZCB0byBieSB0aGUgaXRlcmF0b3IgaSBpbiB0aGUgcmFuZ2UKW2ZpcnN0ICsgMSwgbGFzdCkgZm9yIHdoaWNoICppID09ICooaSAtIDEpIChmb3IgdGhlIHZlcnNpb24gb2YgdW5pcXVlCndpdGggbm8gYXJndW1lbnQpIG9yIHByZWQoKmksICooaSAtMSkpIChmb3IgdGhlIHZlcnNpb24gb2YgdW5pcXVlIHdpdGggYQpwcmVkaWNhdGUgYXJndW1lbnQpIGhvbGRzLiI8L3A+Cgo8cD4KVGhpcyBzZW50ZW5jZXMgbWFrZXMgdXNlIG9mIHRoZSB1bmRlZmluZWQgdGVybSAiRWxpbWluYXRlcyIuIEFsdGhvdWdoIGl0CmlzLCB0byBhIGNlcnRhaW4gZGVncmVlLCByZWFzb25hYmxlIHRvIGNvbnNpZGVyIHRoZSB0ZXJtICJlbGltaW5hdGUiCnN5bm9ueW1vdXMgd2l0aCAiZXJhc2UiLCB1c2luZyAiRXJhc2UiIGluIHRoZSBmaXJzdCBwbGFjZSwgYXMgdGhlCndvcmRpbmcgb2YgMjMuMi4yLjQgW2xpYi5saXN0Lm9wc10sIHBhcmFncmFwaCAxNSBkb2VzLCB3b3VsZCBiZSBjbGVhcmVyLjwvcD4KCjxwPgpUaGUgcmFuZ2Ugb2YgdGhlIGVsZW1lbnRzIHJlZmVycmVkIHRvIGJ5IGl0ZXJhdG9yIGkgaXMgIltmaXJzdCArIDEsCmxhc3QpIi4gSG93ZXZlciwgbmVpdGhlciAiZmlyc3QiIG5vciAibGFzdCIgaXMgZGVmaW5lZC48L3A+Cgo8cD4KVGhlIHNlbnRlbmNlIG1ha2VzIHRocmVlIHRpbWVzIHVzZSBvZiBpdGVyYXRvciBhcml0aG1ldGljIGV4cHJlc3Npb25zICgKImZpcnN0ICsgMSIsICIqaSA9PSAqKGkgLSAxKSIsICJwcmVkKCppLCAqKGkgLTEpKSIgKSB3aGljaCBpcyBub3QKZGVmaW5lZCBmb3IgYmlkaXJlY3Rpb25hbCBpdGVyYXRvciBbc2VlIERSIHN1Ym1pdHRlZCBieSBUaG9tYXMgTWFuZwpyZWdhcmRpbmcgaW52YWxpZCBpdGVyYXRvciBhcml0aG1ldGljIGV4cHJlc3Npb25zXS48L3A+Cgo8cD4KVGhlIHNhbWUgcHJvYmxlbXMgYXMgcG9pbnRlZCBvdXQgaW4gRFIgMjAyIChlcXVpdmFsZW5jZSByZWxhdGlvbiAvIG9yZGVyCm9mIGFyZ3VtZW50cyBmb3IgcHJlZCgpKSBhcHBseSB0byB0aGlzIHBhcmFncmFwaC48L3A+Cgo8cD4KMjMuMi4yLjQgW2xpYi5saXN0Lm9wc10sIHBhcmFncmFwaCAyMDoKPC9wPgoKPHA+CkN1cnJlbnQgd29yZGluZyBzYXlzOgoiVGhyb3dzOiBOb3RoaW5nIHVubGVzcyBhbiBleGNlcHRpb24gaW4gdGhyb3duIGJ5ICppID09ICooaS0xKSBvcgpwcmVkKCppLCAqKGkgLSAxKSkiPC9wPgoKPHA+ClRoZSBzZW50ZW5jZSBtYWtlcyB0d28gdGltZXMgdXNlIG9mIGludmFsaWQgaXRlcmF0b3IgYXJpdGhtZXRpYwpleHByZXNzaW9ucyAoICIqaSA9PSAqKGkgLSAxKSIsICJwcmVkKCppLCAqKGkgLTEpKSIgKS4KPC9wPgo8cD4KW05vdGU6IE1pbm9yIHR5cG9zOiAiaW4iIC8gbWlzc2luZyBkb3QgYXQgZW5kIG9mIHNlbnRlbmNlLl0KPC9wPgoKPHA+CjIzLjIuMi40IFtsaWIubGlzdC5vcHNdLCBwYXJhZ3JhcGggMjE6PC9wPgoKPHA+CkN1cnJlbnQgd29yZGluZyBzYXlzOgoiQ29tcGxleGl0eTogSWYgdGhlIHJhbmdlIChsYXN0IC0gZmlyc3QpIGlzIG5vdCBlbXB0eSwgZXhhY3RseSAobGFzdCAtCmZpcnN0KSAtIDEgYXBwbGljYXRpb25zIG9mIHRoZSBjb3JyZXNwb25kaW5nIHByZWRpY2F0ZSwgb3RoZXJ3aXNlIG5vCmFwcGxpY2F0aW9uIG9mIHRoZSBwcmVkaWNhdGUuPC9wPgoKPHA+ClNlZSBEUiAzMTUgcmVnYXJkaW5nICIobGFzdCAtIGZpcnN0KSIgbm90IHlpZWxkaW5nIGEgcmFuZ2UuPC9wPgoKPHA+CkludmFsaWQgaXRlcmF0b3IgYXJpdGhtZXRpYyBleHByZXNzaW9uICIobGFzdCAtIGZpcnN0KSAtIDEiIGxlZnQgLjwvcD4KCgo8cD4yKSBEZXNjcmlwdGlvbiBvZiBpbnRlbmRlZCBiZWhhdmlvcjo8L3A+Cgo8cD4KRm9yIHRoZSByZXN0IG9mIHRoaXMgRGVmZWN0IFJlcG9ydCwgaXQgaXMgYXNzdW1lZCB0aGF0ICJlbGltaW5hdGUiIGlzCnN1cHBvc2VkIHRvIGJlIHN5bm9ueW1vdXMgdG8gImVyYXNlIiwgdGhhdCAiZmlyc3QiIGlzIGVxdWl2YWxlbnQgdG8gYW4KaXRlcmF0b3Igb2J0YWluZWQgYnkgYSBjYWxsIHRvIGJlZ2luKCksICJsYXN0IiBpcyBlcXVpdmFsZW50IHRvIGFuCml0ZXJhdG9yIG9idGFpbmVkIGJ5IGEgY2FsbCB0byBlbmQoKSwgYW5kIHRoYXQgYWxsIGludmFsaWQgaXRlcmF0b3IKYXJpdGhtZXRpYyBleHByZXNzaW9ucyBhcmUgcmVzb2x2ZWQgYXMgZGVzY3JpYmVkIGluIERSIHN1Ym1pdHRlZCBieQpUaG9tYXMgTWFuZyByZWdhcmRpbmcgaW52YWxpZCBpdGVyYXRvciBhcml0aG1ldGljIGV4cHJlc3Npb25zLjwvcD4KCjxwPgpGdXJ0aGVybW9yZSwgdGhlIHJlc29sdXRpb25zIG9mIERSIDIwMiBhcmUgY29uc2lkZXJlZCByZWdhcmRpbmcKZXF1aXZhbGVuY2UgcmVsYXRpb24gYW5kIG9yZGVyIG9mIGFyZ3VtZW50cyBmb3IgYSBjYWxsIHRvIHByZWQuPC9wPgoKPHA+CkFsbCBpbXBsZW1lbnRhdGlvbnMga25vd24gdG8gdGhlIGF1dGhvciBvZiB0aGlzIERlZmVjdCBSZXBvcnQgY29tcGx5CndpdGggdGhlc2UgYXNzdW1wdGlvbnMsIGFwYXJ0IGZyb20gdGhlIGltcGFjdCBvZiB0aGUgYWx0ZXJuYXRpdmUKcmVzb2x1dGlvbiBvZiBEUiAyMDIuIEV4Y2VwdCBmb3IgdGhlIGNoYW5nZXMgaW1wbGllZCBieSB0aGUgcmVzb2x1dGlvbnMKb2YgRFIgMjAyLCBubyBpbXBhY3Qgb24gY3VycmVudCBjb2RlIGlzIGV4cGVjdGVkLjwvcD4KCjxwPgozKSBQcm9wb3NlZCBmaXhlczo8L3A+Cgo8cD4KQ2hhbmdlIDIzLjIuMi40IFtsaWIubGlzdC5vcHNdLCBwYXJhZ3JhcGggMTkgdG86PC9wPgoKPHA+CiJFZmZlY3Q6IEVyYXNlcyBhbGwgYnV0IHRoZSBmaXJzdCBlbGVtZW50IGZyb20gZXZlcnkgY29uc2VjdXRpdmUgZ3JvdXAKb2YgZWxlbWVudHMsIHJlZmVycmVkIHRvIGJ5IHRoZSBpdGVyYXRvciBpIGluIHRoZSByYW5nZSBbYmVnaW4oKSwKZW5kKCkpLCBmb3Igd2hpY2ggdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGhvbGQ6ICooaS0xKSA9PSAqaSAoZm9yIHRoZQp2ZXJzaW9uIG9mIHVuaXF1ZSB3aXRoIG5vIGFyZ3VtZW50KSBvciBwcmVkKCooaS0xKSwgKmkpICE9IGZhbHNlIChmb3IKdGhlIHZlcnNpb24gb2YgdW5pcXVlIHdpdGggYSBwcmVkaWNhdGUgYXJndW1lbnQpLiI8L3A+Cgo8cD4KQ29tbWVudHMgdG8gdGhlIG5ldyB3b3JkaW5nOjwvcD4KCjxwPgphKSBUaGUgbmV3IHdvcmRpbmcgd2FzIGluZmx1ZW5jZWQgYnkgRFIgMjAyIGFuZCB0aGUgcmVzb2x1dGlvbnMKcHJlc2VudGVkIHRoZXJlLiBJZiBEUiAyMDIgaXMgcmVzb2x2ZWQgaW4gYW5vdGhlciB3YXksIHRoZSBwcm9wb3NlZAp3b3JkaW5nIG5lZWQgYWxzbyBhZGRpdGlvbmFsIHJldmlldy4KYikgIkVyYXNlcyIgcmVmZXJzIGluIHRoZSBhdXRob3IncyBvcGluaW9uIHVuYW1iaWd1b3VzbHkgdG8gdGhlIG1lbWJlcgpmdW5jdGlvbiAiZXJhc2UiLiBJbiBjYXNlIHRoZXJlIGlzIGRvdWJ0IHRoaXMgbWlnaHQgbm90IGJlIHVuYW1naWJ1b3VzLAphIGRpcmVjdCByZWZlcmVuY2UgdG8gdGhlIG1lbWJlciBmdW5jdGlvbiAiZXJhc2UiIGlzIHN1Z2dlc3RlZCBbTm90ZToKVGhpcyB3b3VsZCBhbHNvIGltcGx5IGEgY2hhbmdlIG9mIDIzLjIuMi40IFtsaWIubGlzdC5vcHNdLCBwYXJhZ3JhcGgKMTUuXS4KYykgVGhlIGV4cHJlc3Npb24gIihpIC0gMSkiIHdhcyBsZWZ0LCBidXQgaXMgZXhwZWN0ZWQgdGhhdCBEUiBzdWJtaXR0ZWQKYnkgVGhvbWFzIE1hbmcgcmVnYXJkaW5nIGludmFsaWQgaXRlcmF0b3IgYXJpdGhtZXRpYyBleHByZXNzaW9ucyB3aWxsCnRha2UgdGhpcyBpbnRvIGFjY291bnQuCmQpIFRoZSB3b3JkaW5nICIoZm9yIHRoZSB2ZXJzaW9uIG9mIHVuaXF1ZSB3aXRoIG5vIGFyZ3VtZW50KSIgYW5kICIoZm9yCnRoZSB2ZXJzaW9uIG9mIHVuaXF1ZSB3aXRoIGEgcHJlZGljYXRlIGFyZ3VtZW50KSIgd2FzIGtlcHQgY29uc2Npb3VzbHkKZm9yIGNsYXJpdHkuCmUpICJiZWdpbigpIiBzdWJzdGl0dXRlcyAiZmlyc3QiLCBhbmQgImVuZCgpIiBzdWJzdGl0dXRlcyAibGFzdCIuIFRoZQpyYW5nZSBuZWVkIGFkanVzdG1lbnQgZnJvbSAiW2ZpcnN0ICsgMSwgbGFzdCkiIHRvICJbYmVnaW4oKSwgZW5kKCkpIiB0bwplbnN1cmUgYSB2YWxpZCByYW5nZSBpbiBjYXNlIG9mIGFuIGVtcHR5IGxpc3QuCmYpIElmIGl0IGlzIGNvbnNpZGVyZWQgdGhhdCB0aGUgd29yZGluZyBpcyB1bmNsZWFyIHdoZXRoZXIgaXQgZGVjbGFyZXMKdGhlIGVsZW1lbnQgb2YgYSBncm91cCB3aGljaCBjb25zaXN0cyBvZiBvbmx5IGEgc2luZ2xlIGVsZW1lbnQKaW1wbGljaXRseSB0byBiZSB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGlzIGdyb3VwIFtOb3RlOiBTdWNoIGFuCmludGVycHJldGF0aW9uIGNvdWxkIGV2ZW50dWFsbHkgYXJpc2UgZXNwZWNpYWxseSBpbiBjYXNlIHNpemUoKSA9PSAxXSAsCnRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBzZW50ZW5jZSBpcyBwcm9wb3NlZDogIklmIHN1Y2ggYSBncm91cCBvZgplbGVtZW50cyBjb25zaXN0cyBvZiBvbmx5IGEgc2luZ2xlIGVsZW1lbnQsIHRoaXMgZWxlbWVudCBpcyBhbHNvCmNvbnNpZGVyZWQgdGhlIGZpcnN0IGVsZW1lbnQuIjwvcD4KCjxwPgpDaGFuZ2UgMjMuMi4yLjQgW2xpYi5saXN0Lm9wc10sIHBhcmFncmFwaCAyMCB0bzo8L3A+Cgo8cD4KIlRocm93czogTm90aGluZyB1bmxlc3MgYW4gZXhjZXB0aW9uIGlzIHRocm93biBieSAqKGktMSkgPT0gKmkgb3IKcHJlZCgqKGktMSksICppKS4iPC9wPgoKPHA+CkNvbW1lbnRzIHRvIHRoZSBuZXcgd29yZGluZzo8L3A+Cgo8cD4KYSkgVGhlIHdvcmRpbmcgcmVnYXJkaW5nIHRoZSBjb25kaXRpb25zIGlzIGlkZW50aWNhbCB0byBwcm9wb3NlZAoyMy4yLjIuNCBbbGliLmxpc3Qub3BzXSwgcGFyYWdyYXBoIDE5LiBJZiAyMy4yLjIuNCBbbGliLmxpc3Qub3BzXSwKcGFyYWdyYXBoIDE5IGlzIHJlc29sdmVkIGluIGFub3RoZXIgd2F5LCB0aGUgcHJvcG9zZWQgd29yZGluZyBuZWVkIGFsc28KYWRkaXRpb25hbCByZXZpZXcuCmIpIFRoZSBleHByZXNzaW9uICIoaSAtIDEpIiB3YXMgbGVmdCwgYnV0IGlzIGV4cGVjdGVkIHRoYXQgRFIgc3VibWl0dGVkCmJ5IFRob21hcyBNYW5nIHJlZ2FyZGluZyBpbnZhbGlkIGl0ZXJhdG9yIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMgd2lsbAp0YWtlIHRoaXMgaW50byBhY2NvdW50LgpjKSBUeXBvcyBmaXhlZC48L3A+Cgo8cD4KQ2hhbmdlIDIzLjIuMi40IFtsaWIubGlzdC5vcHNdLCBwYXJhZ3JhcGggMjEgdG86PC9wPgoKPHA+CiJDb21wbGV4aXR5OiBJZiBlbXB0eSgpID09IGZhbHNlLCBleGFjdGx5IHNpemUoKSAtIDEgYXBwbGljYXRpb25zIG9mIHRoZQpjb3JyZXNwb25kaW5nIHByZWRpY2F0ZSwgb3RoZXJ3aXNlIG5vIGFwcGxpY2F0aW9ucyBvZiB0aGUgY29ycmVzcG9uZGluZwpwcmVkaWNhdGUuIjwvcD4KCjxwPgpDb21tZW50cyB0byB0aGUgbmV3IHdvcmRpbmc6PC9wPgoKPHA+CmEpIFRoZSBuZXcgd29yZGluZyBpcyBzdXBwb3NlZCB0byBhbHNvIHJlcGxhY2UgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24Kb2YgRFIgMzE1LCB3aGljaCBzdWZmZXJzIGZyb20gdGhlIHByb2JsZW0gb2YgdW5kZWZpbmVkICJmaXJzdCIgLyAibGFzdCIuCjwvcD4KCjxwPgo1KSBSZWZlcmVuY2VzIHRvIG90aGVyIERSczo8L3A+Cgo8cD5TZWUgRFIgMjAyLgpTZWUgRFIgMjM5LgpTZWUgRFIgMzE1LgpTZWUgRFIgc3VibWl0dGVkIGJ5IFRob21hcyBNYW5nIHJlZ2FyZGluZyBpbnZhbGlkIGl0ZXJhdG9yIGFyaXRobWV0aWMKZXhwcmVzc2lvbnMuPC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+IkFsbCBpbXBsZW1lbnRhdGlvbnMga25vd24gdG8gdGhlIGF1dGhvciBvZiB0aGlzIERlZmVjdCBSZXBvcnQKY29tcGx5IHdpdGggdGhlc2UgYXNzdW1wdGlvbiIsIGFuZCAibm8gaW1wYWN0IG9uIGN1cnJlbnQgY29kZSBpcwpleHBlY3RlZCIsIGkuZS4gdGhlcmUgaXMgbm8gZXZpZGVuY2Ugb2YgcmVhbC13b3JsZCBjb25mdXNpb24gb3IKaGFybS48L3A+Cjxocj4KPGEgbmFtZT0iNDkzIj48aDM+NDkzLiZuYnNwO1VuZGVmaW5lZCBFeHByZXNzaW9uIGluIElucHV0IEl0ZXJhdG9yIE5vdGUgVGl0bGU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLmlucHV0Lml0ZXJhdG9ycyI+IFtsaWIuaW5wdXQuaXRlcmF0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtDaHJpcyBKZWZmZXJzb24mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTMgRGVjIDIwMDQ8L3A+CjxwPjEpIEluIDI0LjEuMS8zLCB0aGUgZm9sbG93aW5nIHRleHQgaXMgY3VycmVudGx5IHByZXNlbnQuPC9wPgoKPHA+Ik5vdGU6IEZvciBpbnB1dCBpdGVyYXRvcnMsIGE9PWIgZG9lcyBub3QgaW1wbHkgKythPSsrYiAoRXF1YWxpdHkgZG9lcwpub3QgZ3VhcmFudGVlIHRoZSBzdWJzdGl0dXRpb24gcHJvcGVydHkgb3IgcmVmZXJlbnRpYWwgdHJhbnNwYXJlbmN5KS4iPC9wPgoKPHA+SG93ZXZlciwgd2hlbiBpbiBUYWJsZSA3MiwgcGFydCBvZiB0aGUgZGVmaW5pdGlvbiBvZiArK3IgaXMgZ2l2ZW4gYXM6PC9wPgoKPHA+InByZTogciBpcyBkZXJlZmVyZW5jZWFibGUuCnBvc3Q6IGFueSBjb3BpZXMgb2YgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHIgYXJlIG5vIGxvbmdlciByZXF1aXJlZAplaXRoZXIgdG8gYmUgZGVyZWZlcmVuY2VhYmxlIC4uLiI8L3A+Cgo8cD5XaGlsZSBhPT1iIGRvZXMgbm90IGltcGx5IHRoYXQgYiBpcyBhIGNvcHkgb2YgYSwgdGhpcyBzdGF0ZW1lbnQgc2hvdWxkCnBlcmhhcHMgc3RpbGwgYmUgbWFkZSBtb3JlIGNsZWFyLjwvcD4KCjxwPjIpIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGludGVuZGVkIGJlaGF2aW91cjwvcD4KCjxwPgozKSBUaGlzIE5vdGUgc2hvdWxkIGJlIGFsdGVyZWQgdG8gc2F5ICJOb3RlOiBGb3IgaW5wdXQgaXRlcmF0b3JzIGE9PWIsCndoZW4gaXRzIGJlaGF2aW91ciBpcyBkZWZpbmVkICsrYT09KytiIG1heSBzdGlsbCBiZSBmYWxzZSAoRXF1YWxpdHkgZG9lcwpub3QgZ3VhcmFudGVlIHRoZSBzdWJzdGl0dXRpb24gcHJvcGVydHkgb3IgcmVmZXJlbnRpYWwgdHJhbnNwYXJlbmN5KS48L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGlzIGlzIGRlc2NyaXB0aXZlIHRleHQsIG5vdCBub3JtYXRpdmUsIGFuZCB0aGUgbWVhbmluZyBpcyBjbGVhci48L3A+Cjxocj4KPGEgbmFtZT0iNDk0Ij48aDM+NDk0LiZuYnNwO1dyb25nIHJ1bnRpbWUgY29tcGxleGl0eSBmb3IgYXNzb2NpYXRpdmUgY29udGFpbmVyJ3MgaW5zZXJ0IGFuZCBkZWxldGU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHMiPiBbbGliLmFzc29jaWF0aXZlLnJlcW10c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SGFucyBCIG9zJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE5IERlYyAyMDA0PC9wPgo8cD5BY2NvcmRpbmcgdG8gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdIHRhYmxlIDY5LCB0aGUgcnVudGltZSBjb21sZXhpdHkKb2YgaW5zZXJ0KHAsIHQpIGFuZCBlcmFzZShxKSBjYW4gYmUgZG9uZSBpbiBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZS48L3A+Cgo8cD5JdCB3YXMgbXkgdW5kZXJzdGFuZGluZyB0aGF0IGFuIGFzc29jaWF0aXZlIGNvbnRhaW5lciBjb3VsZCBiZQppbXBsZW1lbnRlZCBhcyBhIGJhbGFuY2VkIGJpbmFyeSB0cmVlLjwvcD4KCjxwPkZvciBpbnNlcihwLCB0KSwgeW91ICdsbCBoYXZlIHRvIGl0ZXJhdGUgdG8gcCdzIG5leHQgbm9kZSB0byBzZWUgaWYgdApjYW4gYmUgcGxhY2VkIG5leHQgdG8gcC4gIEZ1cnRoZXJtb3JlLCB0aGUgaW5zZXJ0aW9uIHVzdWFsbHkgdGFrZXMKcGxhY2UgYXQgbGVhZiBub2Rlcy4gQW4gaW5zZXJ0IG5leHQgdG8gdGhlIHJvb3Qgbm9kZSB3aWxsIGJlIGRvbmUgYXQKdGhlIGxlZnQgb2YgdGhlIHJvb3QgbmV4dCBub2RlPC9wPgoKPHA+U28gd2hlbiBwIGlzIHRoZSByb290IG5vZGUgeW91ICdsbCBoYXZlIHRvIGl0ZXJhdGUgZnJvbSB0aGUgcm9vdCB0bwppdHMgbmV4dCBub2RlLCB3aGljaCAgdGFrZXMgTyhsb2coc2l6ZSkpIHRpbWUgaW4gYSBiYWxhbmNlZCB0cmVlLjwvcD4KCjxwPklmIHlvdSBpbnNlcnQgYWxsIHZhbHVlcyB3aXRoIGluc2VydChyb290LCB0KSAod2hlcmUgcm9vdCBpcyB0aGUKcm9vdCBvZiB0aGUgdHJlZSBiZWZvcmUgaW5zZXJ0aW9uKSB0aGVuIGVhY2ggaW5zZXJ0IHRha2VzIE8obG9nKHNpemUpKQp0aW1lLiAgVGhlIGFtb3J0aXplZCBjb21wbGV4aXR5IHBlciBpbnNlcnRpb24gd2lsbCBiZSBPKGxvZyhzaXplKSkKYWxzby48L3A+Cgo8cD5Gb3IgZXJhc2UocSksIHRoZSBub3JtYWwgYWxnb3JpdGhtIGZvciBkZWxldGluZyBhIG5vZGUgdGhhdCBoYXMgbm8KZW1wdHkgbGVmdCBvciByaWdodCBzdWJ0cmVlLCBpcyB0byBpdGVyYXRlIHRvIHRoZSBuZXh0IChvciBwcmV2aW91cyksCndoaWNoIGlzIGEgbGVhZiBub2RlLiBUaGVuIGV4Y2hhbmdlIHRoZSBub2RlIHdpdGggdGhlIG5leHQgYW5kIGRlbGV0ZQp0aGUgbGVhZiBub2RlLiAgRnVydGhlcm1vcmUgYWNjb3JkaW5nIHRvIERSIDEzMCwgZXJhc2Ugc2hvdWxkIHJldHVybgp0aGUgbmV4dCBub2RlIG9mIHRoZSBub2RlIGVyYXNlZC4gIFRodXMgZXJhc2luZyB0aGUgcm9vdCBub2RlLApyZXF1aXJlcyBpdGVyYXRpbmcgdG8gdGhlIG5leHQgbm9kZS48L3A+Cgo8cD5Ob3cgaWYgeW91IGVtcHR5IGEgbWFwIGJ5IGRlbGV0aW5nIHRoZSByb290IG5vZGUgdW50aWwgdGhlIG1hcCBpcwplbXB0eSwgZWFjaCBvcGVyYXRpb24gd2lsbCB0YWtlIE8obG9nKHNpemUpKSwgYW5kIHRoZSBhbW9ydGl6ZWQKY29tcGxleGl0eSBpcyBzdGlsbCBPKGxvZyhzaXplKSkuPC9wPgoKPHA+VGhlIG9wZXJhdGlvbnMgY2FuIGJlIGRvbmUgaW4gYW1vcnRpemVkIGNvbnN0YW50IHRpbWUgaWYgaXRlcmF0aW5nCnRvIHRoZSBuZXh0IG5vZGUgY2FuIGJlIGRvbmUgaW4gKG5vbiBhbW9ydGl6ZWQpIGNvbnN0YW50IHRpbWUuICBUaGlzCmNhbiBiZSBkb25lIGJ5IHB1dHRpbmcgYWxsIG5vZGVzIGluIGEgZG91YmxlIGxpbmtlZCBsaXN0LiAgVGhpcwpyZXF1aXJlcyB0d28gZXh0cmEgbGlua3MgcGVyIG5vZGUuICBUbyBtZSB0aGlzIGlzIGEgYml0IG92ZXJraWxsIHNpbmNlCnlvdSBjYW4gYWxyZWFkeSBlZmZpY2llbnRseSBpbnNlcnQgb3IgZXJhc2UgcmFuZ2VzIHdpdGggZXJhc2UoZmlyc3QsCmxhc3QpIGFuZCBpbnNlcnQoZmlyc3QsIGxhc3QpLjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPk9ubHkgImFtb3J0aXplZCBjb25zdGFudCIgaW4gc3BlY2lhbCBjaXJjdW1zdGFuY2VzLCBhbmQgd2UgYmVsaWV2ZQogIHRoYXQncyBpbXBsZW1lbnRhYmxlLiBUaGF0IGlzOiBkb2luZyB0aGlzIE4gdGltZXMgd2lsbCBiZSBPKE4pLCBub3QKICBPKGxvZyBOKS48L3A+Cjxocj4KPGEgbmFtZT0iNDk5Ij48aDM+NDk5LiZuYnNwO1N0ZC4gZG9lc24ndCBzZWVtIHRvIHJlcXVpcmUgc3RhYmxlX3NvcnQoKSB0byBiZSBzdGFibGUhPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMy4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5zdGFibGUuc29ydCI+IFtsaWIuc3RhYmxlLnNvcnRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1ByYXRlZWsgS2FyYW5kaWthciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxMiBBcHIgMjAwNTwvcD4KPGJsb2NrcXVvdGU+CjxwPgoxNy4zLjEuMSBTdW1tYXJ5PC9wPgoKPHA+CjEgVGhlIFN1bW1hcnkgcHJvdmlkZXMgYSBzeW5vcHNpcyBvZiB0aGUgY2F0ZWdvcnksIGFuZCBpbnRyb2R1Y2VzIHRoZSAKZmlyc3QtbGV2ZWwgc3ViY2xhdXNlcy4gRWFjaCBzdWJjbGF1c2UgYWxzbyBwcm92aWRlcyBhIHN1bW1hcnksIGxpc3RpbmcgCnRoZSBoZWFkZXJzIHNwZWNpZmllZCBpbiB0aGUgc3ViY2xhdXNlIGFuZCB0aGUgbGlicmFyeSBlbnRpdGllcyAKcHJvdmlkZWQgaW4gZWFjaCBoZWFkZXIuIAo8L3A+CjxwPgoyIFBhcmFncmFwaHMgbGFiZWxsZWQgIk5vdGUocyk6IiBvciAiRXhhbXBsZShzKToiIGFyZSBpbmZvcm1hdGl2ZSwgCm90aGVyIHBhcmFncmFwaHMgYXJlIG5vcm1hdGl2ZS4KPC9wPgo8L2Jsb2NrcXVvdGU+IAoKPHA+U28gdGhpcyBtZWFucyB0aGF0IGEgIk5vdGVzIiBwYXJhZ3JhcGggd291bGRuJ3QgYmUgbm9ybWF0aXZlLiA8L3A+Cgo8YmxvY2txdW90ZT4KPHA+CjI1LjMuMS4yIHN0YWJsZV9zb3J0CjwvcD4KPHByZT50ZW1wbGF0ZSZsdDtjbGFzcyBSYW5kb21BY2Nlc3NJdGVyYXRvciZndDsgCnZvaWQgc3RhYmxlX3NvcnQoUmFuZG9tQWNjZXNzSXRlcmF0IG9yIGZpcnN0LCBSYW5kb21BY2Nlc3NJdGVyYXRvciBsYXN0KTsgCgp0ZW1wbGF0ZSZsdDtjbGFzcyBSYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgQ29tcGFyZSZndDsgCnZvaWQgc3RhYmxlX3NvcnQoUmFuZG9tQWNjZXNzSXRlcmF0IG9yIGZpcnN0LCBSYW5kb21BY2Nlc3NJdGVyYXRvciBsYXN0LCBDb21wYXJlIGNvbXApOwo8L3ByZT4KPHA+CjEgRWZmZWN0czogU29ydHMgdGhlIGVsZW1lbnRzIGluIHRoZSByYW5nZSBbZmlyc3QsIGxhc3QpLgo8L3A+CjxwPgoyIENvbXBsZXhpdHk6IEl0IGRvZXMgYXQgbW9zdCBOKGxvZyBOKV4yICh3aGVyZSBOID09IGxhc3QgLSBmaXJzdCkgCmNvbXBhcmlzb25zOyBpZiBlbm91Z2ggZXh0cmEgbWVtb3J5IGlzIGF2YWlsYWJsZSwgaXQgaXMgTiBsb2cgTi4KPC9wPgo8cD4KMyBOb3RlczogU3RhYmxlOiB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgdGhlIGVxdWl2YWxlbnQgZWxlbWVudHMgaXMgCnByZXNlcnZlZC4gCjwvcD4KPC9ibG9ja3F1b3RlPiAKCjxwPgpUaGUgTm90ZXMgcGFyYSBpcyBpbmZvcm1hdGl2ZSwgYW5kIG5vd2hlcmUgZWxzZSBpcyBzdGFiaWxpdHkgbWVudGlvbmVkIGFib3ZlLiAKPC9wPgoKPHA+CkFsc28sIEkganVzdCBzZWFyY2hlZCBmb3IgdGhlIHdvcmQgInN0YWJsZSIgaW4gbXkgY29weSBvZiB0aGUgU3RhbmRhcmQuIAphbmQgdGhlIHBocmFzZSAiTm90ZXM6IFN0YWJsZTogdGhlIHJlbGF0aXZlIG9yZGVyIG9mIHRoZSBlbGVtZW50cy4uLiIgCmlzIHJlcGVhdGVkIHNldmVyYWwgdGltZXMgaW4gdGhlIFN0YW5kYXJkIGxpYnJhcnkgY2xhdXNlcyBmb3IgCmRlc2NyaWJpbmcgdmFyaW91cyBmdW5jdGlvbnMuIEhvdyBpcyBpdCB0aGF0IHN0YWJpbGl0eSBpcyB0YWxrZWQgYWJvdXQgCmluIHRoZSBpbmZvcm1hdGl2ZSBwYXJhZ3JhcGg/IE9yIGFtIEkgbWlzc2luZyBzb21ldGhpbmcgb2J2aW91cz8gCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+ClRoaXMgY2hhbmdlIGhhcyBhbHJlYWR5IGJlZW4gbWFkZS4KPC9wPgo8aHI+CjxhIG5hbWU9IjUwMCI+PGgzPjUwMC4mbmJzcDtkb19sZW5ndGggY2Fubm90IGJlIGltcGxlbWVudGVkIGNvcnJlY3RseTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNvZGVjdnQuYnluYW1lIj4gW2xpYi5sb2NhbGUuY29kZWN2dC5ieW5hbWVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0tyenlzenRvZiCvZWxlY2hvd3NraSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNCBNYXkgMjAwNTwvcD4KPG9sPgo8bGk+Y29kZWN2dDo6ZG9fbGVuZ3RoIGlzIG9mIHR5cGUgaW50OzwvbGk+CjxsaT5pdCBpcyBhc3N1bWVkIHRvIGJlIHNvcnQtb2YgcmV0dXJuaW5nIGZyb21fbmV4dCAtIGZyb20gb2YgdHlwZSBwdHJkaWZmX3Q7PC9saT4KPGxpPnB0cmRpZmZfdCBjYW5ub3QgYmUgY2FzdCB0byBhbiBpbnQgd2l0aG91dCBkYXRhIGxvc3MuPC9saT4KPC9vbD4KPHA+CkNvbnRyYWRpY3Rpb24uCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KPC9wPgo8aHI+CjxhIG5hbWU9IjUwMSI+PGgzPjUwMS4mbmJzcDtQcm9wb3NhbDogc3RyZW5ndGhlbiBndWFyYW50ZWVzIG9mIGxpYi5jb21wYXJpc29uczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjUuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuYmFzZSI+IFtsaWIuYmFzZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWUgJmx0O2FudGlfc3BhbV9lbWFpbDIwMDNAeWFob28uY29tJmd0OyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs3IEp1biAyMDA1PC9wPgo8YmxvY2txdW90ZT4KIkZvciB0ZW1wbGF0ZXMgZ3JlYXRlciwgbGVzcywgZ3JlYXRlcl9lcXVhbCwgYW5kIGxlc3NfZXF1YWwsCnRoZSBzcGVjaWFsaXphdGlvbnMgZm9yIGFueSBwb2ludGVyIHR5cGUgeWllbGQgYSB0b3RhbCBvcmRlciwgZXZlbiBpZgp0aGUgYnVpbHQtaW4gb3BlcmF0b3JzICZsdDssICZndDssICZsdDs9LCAmZ3Q7PSBkbyBub3QuIgo8L2Jsb2NrcXVvdGU+Cgo8cD4KVGhlIHN0YW5kYXJkIHNob3VsZCBkbyBtdWNoIGJldHRlciB0aGFuIGd1YXJhbnRlZSB0aGF0IHRoZXNlIHByb3ZpZGUgYQp0b3RhbCBvcmRlciwgaXQgc2hvdWxkIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIHRvIHRlc3QgaWYgbWVtb3J5Cm92ZXJsYXBzLCBpLmUuIHdyaXRlIGEgcG9ydGFibGUgbWVtbW92ZS4gWW91IGNhbiBpbWFnaW5lIGEgcGxhdGZvcm0Kd2hlcmUgdGhlIGJ1aWx0LWluIG9wZXJhdG9ycyB1c2UgYSB1aW50MzJfdCBjb21wYXJpc29uICh0aGlzIHRlc3RzIGZvcgpvdmVybGFwIG9uIHRoaXMgcGxhdGZvcm0pIGJ1dCB0aGUgbGVzcyZsdDtUKiZndDsgZnVuY3RvciBpcyBhbGxvd2VkIHRvIGJlCmRlZmluZWQgdG8gdXNlIGEgaW50MzJfdCBjb21wYXJpc29uLiBPbiB0aGlzIHBsYXRmb3JtLCBpZiB5b3UgdXNlCnN0ZDo6bGVzcyB3aXRoIHRoZSBpbnRlbnQgb2YgbWFraW5nIGEgcG9ydGFibGUgbWVtbW92ZSwgY29tcGFyaXNvbiBvbgphbiBhcnJheSB0aGF0IHN0cmFkZGxlcyB0aGUgMHg3RkZGRkZGRi8weDgwMDAwMDAgYm91bmRhcnkgY2FuIGdpdmUKaW5jb3JyZWN0IHJlc3VsdHMuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIGEgZm9vdG5vdGUgdG8gMjAuNS4zLzggc2F5aW5nOgo8L3A+Cgo8YmxvY2txdW90ZT4KR2l2ZW4gYSBwMSBhbmQgcDIgc3VjaCB0aGF0IHAxIHBvaW50cyB0byBOIG9iamVjdHMgb2YgdHlwZSBUIGFuZCBwMgpwb2ludHMgdG8gTSBvYmplY3RzIG9mIHR5cGUgVC4gSWYgW3AxLHAxK04pIGRvZXMgbm90IG92ZXJsYXAgW3AyLHAyK00pLApsZXNzIHJldHVybnMgdGhlIHNhbWUgdmFsdWUgd2hlbiBjb21wYXJpbmcgYWxsIHBvaW50ZXJzIGluIFtwMSxwMStOKSB0bwphbGwgcG9pbnRlcnMgaW4gW3AyLHAyK00pLiBPdGhlcndpc2UsIHRoZXJlIGlzIGEgdmFsdWUgUSBhbmQgYSB2YWx1ZSBSCnN1Y2ggdGhhdCBsZXNzIHJldHVybnMgdGhlIHNhbWUgdmFsdWUgd2hlbiBjb21wYXJpbmcgYWxsIHBvaW50ZXJzIGluCltwMSxwMStRKSB0byBhbGwgcG9pbnRlcnMgaW4gW3AyLHAyK1IpIGFuZCBhbiBvcHBvc2l0ZSB2YWx1ZSB3aGVuCmNvbXBhcmluZyBhbGwgcG9pbnRlcnMgaW4gW3AxK1EscDErTikgdG8gYWxsIHBvaW50ZXJzIGluIFtwMitSLHAyK00pLgpGb3IgdGhlIHNha2Ugb2YgY29tcGxldGVuZXNzLCB0aGUgbnVsbCBwb2ludGVyIHZhbHVlICg0LjEwKSBmb3IgVCBpcwpjb25zaWRlcmVkIHRvIGJlIGFuIGFycmF5IG9mIDEgb2JqZWN0IHRoYXQgZG9lc24ndCBvdmVybGFwIHdpdGggYW55Cm5vbi1udWxsIHBvaW50ZXIgdG8gVC4gbGVzc19lcXVhbCwgZ3JlYXRlciwgZ3JlYXRlcl9lcXVhbCwgZXF1YWxfdG8sCmFuZCBub3RfZXF1YWxfdG8gZ2l2ZSB0aGUgZXhwZWN0ZWQgcmVzdWx0cyBiYXNlZCBvbiB0aGUgdG90YWwgb3JkZXJpbmcKc2VtYW50aWNzIG9mIGxlc3MuIEZvciBUIG9mIHZvaWQsIHRyZWF0IGl0IGFzIGhhdmluZyBzaW1pbGFyIHNlbWFudGljcwphcyBUIG9mIGNoYXIgaS5lLiBsZXNzJmx0O2N2IFQqJmd0OyhhLCBiKSBnaXZlcyB0aGUgc2FtZSByZXN1bHRzIGFzIGxlc3MmbHQ7Y3YKdm9pZComZ3Q7KGEsIGIpIHdoaWNoIGdpdmVzIHRoZSBzYW1lIHJlc3VsdHMgYXMgbGVzcyZsdDtjdiBjaGFyKiZndDsoKGN2CmNoYXIqKShjdiB2b2lkKilhLCAoY3YgY2hhciopKGN2IHZvaWQqKWIpLgo8L2Jsb2NrcXVvdGU+Cgo8cD4KSSdtIGFsc28gdGhpbmtpbmcgdGhlcmUgc2hvdWxkIGJlIGEgZm9vdG5vdGUgdG8gMjAuNS4zLzEgc2F5aW5nIHRoYXQgaWYKQSBhbmQgQiBhcmUgc2ltaWxhciB0eXBlcyAoNC40LzQpLCBjb21wJmx0O0EmZ3Q7KGEsYikgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZQphcyBjb21wJmx0O0ImZ3Q7KGEsYikgKHdoZXJlIGNvbXAgaXMgbGVzcywgbGVzc19lcXVhbCwgZXRjLikuIEJ1dCB0aGlzIG1pZ2h0CmJlIHByb2JsZW1hdGljIGlmIHRoZXJlIGlzIHNvbWUgcmVhbGx5IGZ1bmt5IG9wZXJhdG9yIG92ZXJsb2FkaW5nIGdvaW5nCm9uIHRoYXQgZG9lcyBkaWZmZXJlbnQgdGhpbmdzIGJhc2VkIG9uIGN2ICh0aGF0IHNob3VsZCBiZSB1bmRlZmluZWQKYmVoYXZpb3IgaWYgc29tZWJvZHkgZG9lcyB0aGF0IHRob3VnaCkuIFRoaXMgYXQgbGVhc3Qgc2hvdWxkIGJlCmd1YXJhbnRlZWQgZm9yIGFsbCBQT0QgdHlwZXMgKGVzcGVjaWFsbHkgcG9pbnRlcnMpIHRoYXQgdXNlIHRoZQpidWlsdC1pbiBjb21wYXJpc29uIG9wZXJhdG9ycy4KPC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+Cmxlc3MgaXMgYWxyZWFkeSByZXF1aXJlZCB0byBwcm92aWRlIGEgc3RyaWN0IHdlYWsgb3JkZXJpbmcgd2hpY2ggaXMgZ29vZCBlbm91Z2gKdG8gZGV0ZWN0IG92ZXJsYXBwaW5nIG1lbW9yeSBzaXR1YXRpb25zLgo8aHI+CjxhIG5hbWU9IjUwNCI+PGgzPjUwNC4mbmJzcDtJbnRlZ2VyIHR5cGVzIGluIHBzZXVkby1yYW5kb20gbnVtYmVyIGVuZ2luZSByZXF1aXJlbWVudHM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDtUUjEgNS4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy90cjEuaHRtbCN0ci5yYW5kLnJlcSI+IFt0ci5yYW5kLnJlcV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7V2FsdGVyIEJyb3duJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzMgSnVsIDIwMDU8L3A+CjxwPgpJbiBbdHIucmFuZC5yZXFdLCBQYXJhZ3JhcGggMiBzdGF0ZXMgdGhhdCAiLi4uIHMgaXMgYSB2YWx1ZSBvZiBpbnRlZ3JhbCB0eXBlLApnIGlzIGFuIC4uLiBvYmplY3QgcmV0dXJuaW5nIHZhbHVlcyBvZiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIC4uLiIKPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJbiA1LjEuMSBbdHIucmFuZC5yZXFdLCBQYXJhZ3JhcGggMiByZXBsYWNlCjwvcD4KCjxibG9ja3F1b3RlPgouLi4gcyBpcyBhIHZhbHVlIG9mIGludGVncmFsIHR5cGUsIGcgaXMgYW4gbHZhbHVlIG9mIGEgdHlwZSBvdGhlciB0aGFuIFggdGhhdApkZWZpbmVzIGEgemVyby1hcmd1bWVudCBmdW5jdGlvbiBvYmplY3QgcmV0dXJuaW5nIHZhbHVlcyBvZiA8ZGVsPnVuc2lnbmVkIGludGVncmFsPC9kZWw+IHR5cGUKPGlucz48dHQ+dW5zaWduZWQgbG9uZyBpbnQ8L3R0PjwvaW5zPiwKLi4uCjwvYmxvY2txdW90ZT4KCjxwPgpJbiA1LjEuMSBbdHIucmFuZC5zZXFdLCBUYWJsZSAxNiwgcmVwbGFjZSBpbiB0aGUgbGluZSBmb3IgWChzKQo8L3A+Cgo8YmxvY2txdW90ZT4KY3JlYXRlcyBhbiBlbmdpbmUgd2l0aCB0aGUgaW5pdGlhbCBpbnRlcm5hbCBzdGF0ZQpkZXRlcm1pbmVkIGJ5IDxpbnM+PHR0PnN0YXRpY19jYXN0Jmx0O3Vuc2lnbmVkIGxvbmcmZ3Q7KDwvdHQ+PC9pbnM+PHR0PjxpPnM8L2k+PC90dD48aW5zPjx0dD4pPC90dD48L2lucz4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+WwpNb250IFRyZW1ibGFudDogIEJvdGggcyBhbmQgZyBzaG91bGQgYmUgdW5zaWduZWQgbG9uZy4KVGhpcyBzaG91bGQgcmVmZXIgdG8gdGhlIGNvbnN0cnVjdG9yIHNpZ25hdHVyZXMuIEplbnMgIHByb3ZpZGVkIHdvcmRpbmcgcG9zdCBNb250IFRyZW1ibGFudC4KXTwvaT48L3A+Cgo8cD48aT5bCkJlcmxpbjogIE4xOTMyIGFkb3B0cyB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbjogIHNlZSAyNi4zLjEuMy8xZSBhbmQgVGFibGUgMyByb3cgMi4gTW92ZWQKdG8gUmVhZHkuCl08L2k+PC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpKZW5zOiAgSnVzdCByZXF1aXJpbmcgWCh1bnNpZ25lZCBsb25nKSBzdGlsbCBtYWtlcyBpdCBwb3NzaWJsZQpmb3IgYW4gZXZpbCBsaWJyYXJ5IHdyaXRlciB0byBhbHNvIHN1cHBseSBhIFgoaW50KSB0aGF0IGRvZXMgc29tZXRoaW5nCnVuZXhwZWN0ZWQuICBUaGUgd29yZGluZyBhYm92ZSByZXF1aXJlcyB0aGF0IFgocykgYWx3YXlzIHBlcmZvcm1zCmFzIGlmIFgodW5zaWduZWQgbG9uZykgd291bGQgaGF2ZSBiZWVuIGNhbGxlZC4gIEkgYmVsaWV2ZSB0aGF0IGlzCnN1ZmZpY2llbnQgYW5kIGltcGxlbWVudHMgb3VyIGludGVudGlvbnMgZnJvbSBNb250IFRyZW1ibGFudC4gIEkKc2VlIG5vIGFkZGl0aW9uYWwgdXNlIGluIGFjdHVhbGx5IHJlcXVpcmluZyBhIFgodW5zaWduZWQgbG9uZykKc2lnbmF0dXJlLiAgdS5zZWVkKHMpIGlzIGNvdmVyZWQgYnkgaXRzIHJlZmVyZW5jZSB0byBYKHMpLCBzYW1lCmFyZ3VtZW50cy4KPC9wPgo8aHI+CjxhIG5hbWU9IjUwNiI+PGgzPjUwNi4mbmJzcDtSZXF1aXJlbWVudHMgb2YgRGlzdHJpYnV0aW9uIHBhcmFtZXRlciBmb3IgdmFyaWF0ZV9nZW5lcmF0b3I8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDtUUjEgNS4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy90cjEuaHRtbCN0ci5yYW5kLnZhciI+IFt0ci5yYW5kLnZhcl08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7V2FsdGVyIEJyb3duJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzMgSnVsIDIwMDU8L3A+CjxwPgpQYXJhZ3JhcGggMyByZXF1aXJlcyB0aGF0IHRlbXBsYXRlIGFyZ3VtZW50IFUgKHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRlbXBsYXRlCnBhcmFtZXRlciBFbmdpbmUpIHNhdGlzZnkgYWxsIHVuaWZvcm0gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgcmVxdWlyZW1lbnRzLgpIb3dldmVyLCB0aGVyZSBpcyBubyAgYW5hbG9nb3VzIHJlcXVpcmVtZW50IHJlZ2FyZGluZyB0aGUgdGVtcGxhdGUgYXJndW1lbnQKdGhhdCBjb3JyZXNwb25kcyB0byB0ZW1wbGF0ZSBwYXJhbWV0ZXIgRGlzdHJpYnV0aW9uLiAgV2UgYmVsaWV2ZSB0aGVyZSBzaG91bGQKYmUsIGFuZCB0aGF0IGl0IHNob3VsZCByZXF1aXJlIHRoYXQgdGhpcyB0ZW1wbGF0ZSBhcmd1bWVudCBzYXRpc2Z5IGFsbCByYW5kb20KZGlzdHJpYnV0aW9uIHJlcXVpcmVtZW50cy4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDb25zZXF1ZW5jZSAxOiBSZW1vdmUgdGhlIHByZWNvbmRpdGlvbiBjbGF1c2VzIFt0ci5yYW5kLnZhcl0vMTYgYW5kIC8xOC4KPC9wPgo8cD4KQ29uc2VxdWVuY2UgMjogQWRkIG1heCgpIGFuZCBtaW4oKSBmdW5jdGlvbnMgdG8gdGhvc2UgZGlzdHJpYnV0aW9ucyB0aGF0CmRvIG5vdCBhbHJlYWR5IGhhdmUgdGhlbS4KPC9wPgoKPHA+PGk+WwpNb250IFRyZW1ibGFudDogSmVucyByZWNjb21tZW5kcyBOQUQsIG1pbi9tYXggbm90IG5lZWRlZCBldmVyeXdoZXJlLgpNYXJjIHN1cHBvcnRzIGhhdmluZyBtaW4gYW5kIG1heCB0byBzYXRpc2Z5IGdlbmVyaWMgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlLgpdPC9pPjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgpCZXJsaW46ICBOMTkzMiBtYWtlcyB0aGlzIG1vb3Q6IHZhcmlhdGVfZ2VuZXJhdG9yIGhhcyBiZWVuIGVsaW1pbmF0ZWQuCjxocj4KPGEgbmFtZT0iNTA5Ij48aDM+NTA5LiZuYnNwO1VuaWZvcm1faW50IHRlbXBsYXRlIHBhcmFtZXRlcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDtUUjEgNS4xLjcuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3RyMS5odG1sI3RyLnJhbmQuZGlzdC5pdW5pZiI+IFt0ci5yYW5kLmRpc3QuaXVuaWZdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1dhbHRlciBCcm93biZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIEp1bCAyMDA1PC9wPgo8cD4KSW4gW3RyLnJhbmQuZGlzdC5pdW5pZl0gdGhlIHVuaWZvcm1faW50IGRpc3RyaWJ1dGlvbiBjdXJyZW50bHkgaGFzIGEgc2luZ2xlCnRlbXBsYXRlIHBhcmFtZXRlciwgSW50VHlwZSwgdXNlZCBhcyB0aGUgaW5wdXRfdHlwZSBhbmQgYXMgdGhlIHJlc3VsdF90eXBlCm9mIHRoZSBkaXN0cmlidXRpb24uICBXZSBiZWxpZXZlIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBjb25mbGF0ZSB0aGVzZSB0eXBlcwppbiB0aGlzIHdheS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpXZSByZWNvbW1lbmQgdGhhdCB0aGVyZSBiZSBhIHNlY29uZCB0ZW1wbGF0ZSAgcGFyYW1ldGVyIHRvCnJlZmxlY3QgdGhlIGRpc3RyaWJ1dGlvbtVzIGlucHV0X3R5cGUsIGFuZCB0aGF0IHRoZSBleGlzdGluZyBmaXJzdCB0ZW1wbGF0ZQpwYXJhbWV0ZXIgY29udGludWUgdG8gcmVmbGVjdCAoc29sZWx5KSB0aGUgcmVzdWx0X3R5cGU6CjwvcD4KPGJsb2NrcXVvdGU+PHByZT50ZW1wbGF0ZSZsdDsgY2xhc3MgSW50VHlwZSA9IGludCwgVUludFR5cGUgPSB1bnNpZ25lZCBpbnQgJmd0OwpjbGFzcyB1bmlmb3JtX2ludAp7CnB1YmxpYzoKICAvLyB0eXBlcwogIHR5cGVkZWYgIFVJbnRUeXBlICBpbnB1dF90eXBlOwogIHR5cGVkZWYgIEludFR5cGUgICByZXN1bHRfdHlwZTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+PGk+WwpCZXJsaW46IE1vdmVkIHRvIE5BRC4gIE4xOTMyIG1ha2VzIHRoaXMgbW9vdDogdGhlIGlucHV0X3R5cGUgdGVtcGxhdGUgcGFyYW1ldGVyIGhhcyBiZWVuCmVsaW1pbmF0ZWQuCl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSI1MTAiPjxoMz41MTAuJm5ic3A7SW5wdXRfdHlwZSBmb3IgYmVybm91bGxpX2Rpc3RyaWJ1dGlvbjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwO1RSMSA1LjEuNy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvdHIxLmh0bWwjdHIucmFuZC5kaXN0LmJlcm4iPiBbdHIucmFuZC5kaXN0LmJlcm5dPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1dhbHRlciBCcm93biZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIEp1bCAyMDA1PC9wPgo8cD4KSW4gW3RyLnJhbmQuZGlzdC5iZXJuXSB0aGUgZGlzdHJpYnV0aW9uIGN1cnJlbnRseSByZXF1aXJlczsKPC9wPgo8YmxvY2txdW90ZT48cHJlPnR5cGVkZWYgIGludCAgaW5wdXRfdHlwZTsKPC9wcmU+PC9ibG9ja3F1b3RlPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpXZSBiZWxpZXZlIHRoaXMgaXMgYW4gdW5mb3J0dW5hdGUgY2hvaWNlLCBhbmQgcmVjb21tZW5kIGluc3RlYWQ6CjwvcD4KPGJsb2NrcXVvdGU+PHByZT50eXBlZGVmICB1bnNpZ25lZCBpbnQgIGlucHV0X3R5cGU7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPjxpPlsKQmVybGluOiAgTW92ZWQgdG8gTkFELiBOMTkzMiBtYWtlcyB0aGlzIG1vb3Q6IHRoZSBpbnB1dF90eXBlIHRlbXBsYXRlIHBhcmFtZXRlciBoYXMgYmVlbgplbGltaW5hdGVkLgpdPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iNTExIj48aDM+NTExLiZuYnNwO0lucHV0X3R5cGUgZm9yIGJpbm9taWFsX2Rpc3RyaWJ1dGlvbjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwO1RSMSA1LjEuNy41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvdHIxLmh0bWwjdHIucmFuZC5kaXN0LmJpbiI+IFt0ci5yYW5kLmRpc3QuYmluXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtXYWx0ZXIgQnJvd24mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MyBKdWwgMjAwNTwvcD4KPHA+ClVubGlrZSBhbGwgb3RoZXIgZGlzdHJpYnV0aW9ucyBpbiBUUjEsIHRoaXMgYmlub21pYWxfZGlzdHJpYnV0aW9uIGhhcyBhbgppbXBsZW1lbnRhdGlvbi1kZWZpbmVkICBpbnB1dF90eXBlLiAgV2UgYmVsaWV2ZSB0aGlzIGlzIGFuIHVuZm9ydHVuYXRlIGNob2ljZSwKYmVjYXVzZSBpdCBoaW5kZXJzIHVzZXJzIGZyb20gd3JpdGluZyBwb3J0YWJsZSBjb2RlLiAgSXQgYWxzbyBoaW5kZXJzIHRoZQp3cml0aW5nIG9mIGNvbXBsaWFuY2UgdGVzdHMuICBXZSByZWNvbW1lbmQgaW5zdGVhZDoKPC9wPgo8YmxvY2txdW90ZT48cHJlPnR5cGVkZWYgIFJlYWxUeXBlICBpbnB1dF90eXBlOwo8L3ByZT48L2Jsb2NrcXVvdGU+CjxwPgpXaGlsZSB0aGlzIGNob2ljZSBpcyBzb21ld2hhdCBhcmJpdHJhcnkgKGFzIGl0IHdhcyBmb3Igc29tZSBvZiB0aGUgb3RoZXIKZGlzdHJpYnV0aW9ucyksIHdlIG1ha2UgIHRoaXMgcGFydGljdWxhciBjaG9pY2UgYmVjYXVzZSAodW5saWtlIGFsbCBvdGhlcgpkaXN0cmlidXRpb25zKSBvdGhlcndpc2UgdGhpcyB0ZW1wbGF0ZSB3b3VsZCBub3QgcHVibGlzaCBpdHMgUmVhbFR5cGUKYXJndW1lbnQgYW5kIHNvIHVzZXJzIGNvdWxkIG5vdCB3cml0ZSBnZW5lcmljIGNvZGUgdGhhdCBhY2Nlc3NlZCB0aGlzCnNlY29uZCB0ZW1wbGF0ZSBwYXJhbWV0ZXIuICBJbiB0aGlzIHJlc3BlY3QsIHRoZSBjaG9pY2UgaXMgY29uc2lzdGVudCB3aXRoCnRoZSBvdGhlciBkaXN0cmlidXRpb25zIGluICBUUjEuIAo8L3A+CjxwPgpXZSBoYXZlIHR3byByZWFzb25zIGZvciByZWNvbW1lbmRpbmcgdGhhdCBhIHJlYWwgdHlwZSBiZSBzcGVjaWZpZWQgaW5zdGVhZC4KT25lIHJlYXNvbiBpcyAgYmFzZWQgc3BlY2lmaWNhbGx5IG9uIGNoYXJhY3RlcmlzdGljcyBvZiBiaW5vbWlhbCBkaXN0cmlidXRpb24KaW1wbGVtZW50YXRpb25zLCB3aGlsZSB0aGUgb3RoZXIgaXMgYmFzZWQgb24gbWF0aGVtYXRpY2FsIGNoYXJhY3RlcmlzdGljcyBvZgpwcm9iYWJpbGl0eSBkaXN0cmlidXRpb24gZnVuY3Rpb25zIGluIGdlbmVyYWwuCjwvcD4KPHA+CkltcGxlbWVudGF0aW9ucyBvZiBiaW5vbWlhbCBkaXN0cmlidXRpb25zIGNvbW1vbmx5IHVzZSBTdGlybGluZyBhcHByb3hpbWF0aW9ucwpmb3IgdmFsdWVzIGluIGNlcnRhaW4gcmFuZ2VzLiAgSXQgaXMgZmFyIG1vcmUgbmF0dXJhbCB0byB1c2UgcmVhbCB2YWx1ZXMgdG8KcmVwcmVzZW50IHRoZXNlIGFwcHJveGltYXRpb25zIHRoYW4gaXQgd291bGQgYmUgdG8gdXNlIGludGVncmFsIHZhbHVlcyB0byBkbwpzby4gIEluIG90aGVyIHJhbmdlcywgaW1wbGVtZW50YXRpb25zIHJlcGx5IG9uIHRoZSBCZXJub3VsbGkgIGRpc3RyaWJ1dGlvbiB0bwpvYnRhaW4gdmFsdWVzLiAgV2hpbGUgVFIx1XMgYmVybm91bGxpX2Rpc3RyaWJ1dGlvbjo6aW5wdXRfdHlwZSBpcyBzcGVjaWZpZWQgYXMKaW50LCB3ZSBiZWxpZXZlIHRoaXMgd291bGQgYmUgYmV0dGVyIHNwZWNpZmllZCBhcyBkb3VibGUuCjwvcD4KPHA+ClRoaXMgYnJpbmdzIHVzIHRvIG91ciBtYWluIHBvaW50OiAgVGhlIG5vdGlvbiBvZiBhIHJhbmRvbSBkaXN0cmlidXRpb24gcmVzdHMKb24gdGhlIG5vdGlvbiBvZiBhIGN1bXVsYXRpdmUgZGlzdHJpYnV0aW9uIGZ1bmN0aW9uLCB3aGljaCBpbiB0dXJuIG1hdGhlbWF0aWNhbGx5CmRlcGVuZHMgb24gYSBjb250aW51b3VzIGRlcGVuZGVudCB2YXJpYWJsZS4gIEluZGVlZCwgc3VjaCBhIGRpc3RyaWJ1dGlvbiBmdW5jdGlvbgp3b3VsZCBiZSBtZWFuaW5nbGVzcyBpZiBpdCBkZXBlbmRlZCBvbiAgZGlzY3JldGUgdmFsdWVzIHN1Y2ggYXMgaW50ZWdlcnPRYW5kIHRoaXMKcmVtYWlucyB0cnVlIGV2ZW4gaWYgdGhlIGRpc3RyaWJ1dGlvbiBmdW5jdGlvbiB3ZXJlIHRvIHRha2UgZGlzY3JldGUgc3RlcHMuCjwvcD4KPHA+CkFsdGhvdWdoIHRoaXMgbm90ZSBpcyBzcGVjaWZpY2FsbHkgYWJvdXQgYmlub21pYWxfZGlzdHJpYnV0aW9uOjppbnB1dF90eXBlLAp3ZSBpbnRlbmQgdG8gcmVjb21tZW5kIHRoYXQgYWxsIG9mIHRoZSByYW5kb20gZGlzdHJpYnV0aW9uc9UgaW5wdXRfdHlwZXMgYmUKc3BlY2lmaWVkIGFzIGEgcmVhbCB0eXBlIChlaXRoZXIgYSBSZWFsVHlwZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIsIG9yIGRvdWJsZSwKYXMgYXBwcm9wcmlhdGUpLgo8L3A+CjxwPgpPZiB0aGUgbmluZSBkaXN0cmlidXRpb25zIGluIFRSMSwgZm91ciBhbHJlYWR5IGhhdmUgdGhpcyBjaGFyYWN0ZXJpc3RpYwoodW5pZm9ybV9yZWFsLCBleHBvbmVudGlhbF9kaXN0cmlidXRpb24sIG5vcm1hbF9kaXN0cmlidXRpb24sIGFuZApnYW1tYV9kaXN0cmlidXRpb24pLiAgV2UgaGF2ZSBhbHJlYWR5IGFyZ3VlZCB0aGUgY2FzZSBmb3IgdGhlIGJpbm9taWFsIHRoZQpyZW1haW5pbmcgZm91ciBkaXN0cmlidXRpb25zLgo8L3A+CjxwPgpJbiB0aGUgY2FzZSBvZiB1bmlmb3JtX2ludCwgd2UgYmVsaWV2ZSB0aGF0IHRoZSBjYWxjdWxhdGlvbnMgdG8gcHJvZHVjZSBhbgppbnRlZ2VyIHJlc3VsdCBpbiBhICBzcGVjaWZpZWQgcmFuZ2UgZnJvbSBhbiBpbnRlZ2VyIGluIGEgZGlmZmVyZW50IHNwZWNpZmllZApyYW5nZSBpcyBiZXN0IGRvbmUgdXNpbmcgcmVhbCBhcml0aG1ldGljLiAgVGhpcyBpcyBiZWNhdXNlIGl0IGludm9sdmVzIGEKcHJvZHVjdCwgb25lIG9mIHdob3NlIHRlcm1zIGlzIHRoZSByYXRpbyBvZiB0aGUgZXh0ZW50cyBvZiB0aGUgdHdvIHJhbmdlcy4KV2l0aG91dCByZWFsIGFyaXRobWV0aWMsIHRoZSByZXN1bHRzIGJlY29tZSBsZXNzIHVuaWZvcm06IHNvbWUgbnVtYmVycyBiZWNvbWUKbW9yZSAgKG9yIGxlc3MpIHByb2JhYmxlIHRoYXQgdGhleSBzaG91bGQgYmUuICBUaGlzIGlzLCBvZiBjb3Vyc2UsIHVuZGVzaXJlYWJsZQpiZWhhdmlvciBpbiBhIHVuaWZvcm0gZGlzdHJpYnV0aW9uLgo8L3A+CjxwPgpGaW5hbGx5LCB3ZSBiZWxpZXZlIHRoYXQgaW4gdGhlIGNhc2Ugb2YgdGhlIGJlcm5vdWxsaV9kaXN0cmlidXRpb24gKGJyaWVmbHkKbWVudGlvbmVkIGVhcmxpZXIpLCBhcyB3ZWxsIGFzIHRoZSBjYXNlcyBvZiB0aGUgZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbiBhbmQgdGhlCnBvaXNzb25fZGlzdHJpYnV0aW9uLCBpdCB3b3VsZCBiZSBmYXIgbW9yZSBuYXR1cmFsIHRvIGhhdmUgYSByZWFsIGlucHV0X3R5cGUuClRoaXMgaXMgYmVjYXVzZSB0aGUgbW9zdCBuYXR1cmFsIGNvbXB1dGF0aW9uIGludm9sdmVzIHRoZSAgcmFuZG9tIG51bWJlcgpkZWxpdmVyZWQgYW5kIHRoZSBkaXN0cmlidXRpb27VcyBwYXJhbWV0ZXIgcCAoaW4gdGhlIGNhc2Ugb2YgYmVybm91bGxpX2Rpc3RyaWJ1dGlvbiwKZm9yIGV4YW1wbGUsIHRoZSBjb21wdXRhdGlvbiBpcyBhIGNvbXBhcmlzb24gYWdhaW5zdCBwKSwgYW5kIHAgaXMgYWxyZWFkeSBzcGVjaWZpZWQKaW4gZWFjaCBjYXNlIGFzIGhhdmluZyBzb21lIHJlYWwgdHlwZS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxibG9ja3F1b3RlPjxwcmU+dHlwZWRlZiAgUmVhbFR5cGUgIGlucHV0X3R5cGU7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPjxpPlsKQmVybGluOiAgTW92ZWQgdG8gTkFELiAgTjE5MzIgbWFrZXMgdGhpcyBtb290OiB0aGUgaW5wdXRfdHlwZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgaGFzIGJlZW4KZWxpbWluYXRlZC4KXTwvaT48L3A+Cjxocj4KPGEgbmFtZT0iNTEyIj48aDM+NTEyLiZuYnNwO1NlZWRpbmcgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSBmcm9tIGEgc2luZ2xlIHVuc2lnbmVkIGxvbmc8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDtUUjEgNS4xLjQuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3RyMS5odG1sI3RyLnJhbmQuZW5nLnN1YjEiPiBbdHIucmFuZC5lbmcuc3ViMV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7V2FsdGVyIEJyb3duJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzMgSnVsIDIwMDU8L3A+CjxwPgpQYXJhZ3JhcGggOCBzcGVjaWZpZXMgdGhlIGFsZ29yaXRobSBieSB3aGljaCBhIHN1YnRyYWN0X3dpdGhfY2FycnlfMDEgIGVuZ2luZQppcyB0byBiZSBzZWVkZWQgZ2l2ZW4gYSBzaW5nbGUgdW5zaWduZWQgbG9uZy4gIFRoaXMgYWxnb3JpdGhtIGlzIHNlcmlvdXNseQpmbGF3ZWQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGVuZ2luZSBwYXJhbWV0ZXIgdyAoYWxzbyBrbm93biBhcyB3b3JkX3NpemUpCmV4Y2VlZHMgMzEgW2JpdHNdLiAgVGhlIGtleSBwYXJ0IG9mIHRoZSBwYXJhZ3JhcGggcmVhZHM6CjwvcD4KPGJsb2NrcXVvdGU+CnNldHMgeCgtcikgLi4uIHgoLTEpIHRvIChsY2coMSkqMioqKC13KSkgbW9kIDEKPC9ibG9ja3F1b3RlPgo8cD4KYW5kIHNvIGZvcnRoLiAKPC9wPgo8cD4KU2luY2UgdGhlIHNwZWNpZmllZCBsaW5lYXIgY29uZ3J1ZW50aWFsIGVuZ2luZSwgbGNnLCBkZWxpdmVycyBudW1iZXJzIHdpdGgKYSBtYXhpbXVtIG9mIDIxNDc0ODM1NjMgKGp1c3QgYSBzaGFkZSB1bmRlciAzMSBiaXRzKSwgdGhlbiB3aGVuIHcgaXMsIGZvcgpleGFtcGxlLCA0OCwgZWFjaCBvZiB0aGUgeChpKSB3aWxsIGJlIGxlc3MgdGhhbiAyKiotMTcuICBUaGUgY29uc2VxdWVuY2UKaXMgdGhhdCByb3VnaGx5IHRoZSBmaXJzdCA0MDAgbnVtYmVycyBkZWxpdmVyZWQgd2lsbCBiZSAgY29uc3BpY3VvdXNseQpjbG9zZSB0byBlaXRoZXIgemVybyBvciBvbmUuCjwvcD4KPHA+ClVuZm9ydHVuYXRlbHksIHRoaXMgaXMgbm90IGFuIGlubm9jdW91cyBmbGF3OiAgT25lIG9mIHRoZSBwcmVkZWZpbmVkIGVuZ2luZXMKaW4gW3RyLnJhbmQucHJlZGVmXSwgIG5hbWVseSByYW5sdXg2NF9iYXNlXzAxLCBoYXMgdyA9IDQ4IGFuZCB3b3VsZCBleGhpYml0CnRoaXMgcG9vciBiZWhhdmlvciwgd2hpbGUgdGhlIG9yaWdpbmFsIE4xMzc4IHByb3Bvc2FsIHN0YXRlcyB0aGF0IHRoZXNlCnByZS1kZWZpbmVkIGVuZ2luZXMgYXJlIGludGVuZGVkIHRvIGJlIG9mICJrbm93biBnb29kIHByb3BlcnRpZXMuIgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDUuMS40LjQgW3RyLnJhbmQuZW5nLnN1YjFdLCByZXBsYWNlIHRoZSAiZWZmZWN0cyIgY2xhdXNlIGZvcgp2b2lkIHNlZWQodW5zaWduZWQgbG9uZyB2YWx1ZSA9IDE5NzgwNTAzKSBieQo8L3A+Cgo8YmxvY2txdW90ZT4KPGk+RWZmZWN0czo8L2k+IElmIDx0dD52YWx1ZSA9PSAwPC90dD4sIHNldHMgdmFsdWUgdG8gPHR0PjE5NzgwNTAzPC90dD4uIEluIGFueQpjYXNlLCA8ZGVsPndpdGggYSBsaW5lYXIgY29uZ3J1ZW50aWFsIGdlbmVyYXRvciA8dHQ+bGNnPC90dD4oaSkgaGF2aW5nIHBhcmFtZXRlcnMKPHR0PjxpPm08c3ViPmxjZzwvc3ViPjwvaT4gPSAyMTQ3NDgzNTYzPC90dD4sIDx0dD48aT5hPHN1Yj5sY2c8L3N1Yj48L2k+ID0gNDAwMTQ8L3R0PiwKPHR0PjxpPmM8c3ViPmxjZzwvc3ViPjwvaT4gPSAwPC90dD4sIGFuZCA8dHQ+PGk+bGNnPC9pPigwKSA9IHZhbHVlPC90dD4sPC9kZWw+CnNldHMgPGlucz5jYXJyeTx0dD4oLTEpPC90dD4gYW5kPC9pbnM+IDx0dD54KC1yKSAmIzgyMzA7IHgoLTEpPC90dD4KPGlucz5hcyBpZiBleGVjdXRpbmc8L2lucz4KCjxibG9ja3F1b3RlPjxwcmU+PGlucz4KbGluZWFyX2NvbmdydWVudGlhbCZsdDt1bnNpZ25lZCBsb25nLCA0MDAxNCwgMCwgMjE0NzQ4MzU2MyZndDsgbGNnKHZhbHVlKTsKc2VlZChsY2cpOwo8L2lucz48L3ByZT48L2Jsb2NrcXVvdGU+Cgo8ZGVsPnRvIDx0dD4oPGk+bGNnPC9pPigxKSC3IDI8c3VwPi08aT53PC9pPjwvc3VwPikgbW9kIDEKJiM4MjMwOyAoPGk+bGNnPC9pPig8aT5yPC9pPikgtyAyPHN1cD4tPGk+dzwvaT48L3N1cD4pIG1vZCAxPC90dD4sCnJlc3BlY3RpdmVseS4gSWYgPHR0PjxpPng8L2k+KC0xKSA9PSAwPC90dD4sIHNldHMgY2Fycnk8dHQ+KC0xKSA9IDI8c3VwPi08aT53PC9pPjwvc3VwPjwvdHQ+LAplbHNlIHNldHMgY2Fycnk8dHQ+KC0xKSA9IDA8L3R0Pi48L2RlbD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+WwpKZW5zIHByb3ZpZGVkIHJldmlzZWQgd29yZGluZyBwb3N0IE1vbnQgVHJlbWJsYW50LgpdPC9pPjwvcD4KCjxwPjxpPlsKQmVybGluOiBOMTkzMiBhZG9wdHMgdGhlIG9yaWdpbmFsbHktcHJvcG9zZWQgcmVzb2x1dGlvbiBvZiB0aGUgaXNzdWUuCkplbnMncyBzdXBwbGllZCB3b3JkaW5nIGlzIGEgY2xlYXJlciBkZXNjcmlwdGlvbiBvZiB3aGF0IGlzCmludGVuZGVkLiAgTW92ZWQgdG8gUmVhZHkuCl08L2k+PC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpKZW5zOiBJJ20gdXNpbmcgYW4gZXhwbGljaXQgdHlwZSBoZXJlLCBiZWNhdXNlIGZpeGluZyB0aGUKcHJvc2Ugd291bGQgcHJvYmFibHkgbm90IHF1YWxpZnkgZm9yIHRoZSAod2l0aCBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MDQiPjUwNDwvYT4gZXZlbgpzdHJpY3RlcikgcmVxdWlyZW1lbnRzIHdlIGhhdmUgZm9yIHNlZWQoR2VuJmFtcDspLgo8L3A+Cgo8cD48aT5bClBvcnRsYW5kOiAgU3Vic3VtZWQgYnkgTjIxMTEuCl08L2k+PC9wPgo8aHI+CjxhIG5hbWU9IjUxMyI+PGgzPjUxMy4mbmJzcDtTaXplIG9mIHN0YXRlIGZvciBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7VFIxIDUuMS40LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy90cjEuaHRtbCN0ci5yYW5kLmVuZy5zdWIxIj4gW3RyLnJhbmQuZW5nLnN1YjFdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1dhbHRlciBCcm93biZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIEp1bCAyMDA1PC9wPgo8cD4KUGFyYWdyYXBoIDMgYmVnaW5zOgo8L3A+CjxibG9ja3F1b3RlPgpUaGUgc2l6ZSBvZiB0aGUgc3RhdGUgaXMgci4KPC9ibG9ja3F1b3RlPgo8cD4KSG93ZXZlciwgdGhpcyBpcyBub3QgcXVpdGUgY29uc2lzdGVudCB3aXRoIHRoZSByZW1haW5kZXIgb2YgdGhlIHBhcmFncmFwaAp3aGljaCBzcGVjaWZpZXMgYSB0b3RhbCAgb2YgbnIrMSBpdGVtcyBpbiB0aGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZgp0aGUgc3RhdGUuICBXZSByZWNvbW1lbmQgdGhlIHNlbnRlbmNlIGJlIGNvcnJlY3RlZCB0byBtYXRjaDoKPC9wPgo8YmxvY2txdW90ZT4KVGhlIHNpemUgb2YgdGhlIHN0YXRlIGlzIG5yKzEuCjwvYmxvY2txdW90ZT4KPHA+ClRvIGdpdmUgbWVhbmluZyB0byB0aGUgY29lZmZpY2llbnQgbiwgaXQgbWF5IGJlIGFsc28gZGVzaXJhYmxlIHRvIG1vdmUKbtVzIGRlZmluaXRpb24gZnJvbSBsYXRlciBpbiB0aGUgcGFyYWdyYXBoLiAgRWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcKc2VlbSByZWFzb25hYmxlIGZvcm11bGF0aW9uczoKPC9wPgo8YmxvY2txdW90ZT4KV2l0aCBuPS4uLiwgdGhlIHNpemUgb2YgdGhlIHN0YXRlIGlzIG5yKzEuCjwvYmxvY2txdW90ZT4KPGJsb2NrcXVvdGU+ClRoZSBzaXplIG9mIHRoZSBzdGF0ZSBpcyBucisxLCB3aGVyZSBuPS4uLiAuCjwvYmxvY2txdW90ZT4KPHA+CjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48aT5bCkplbnM6ICBJIHBsZWFkIGZvciAiTkFEIiBvbiB0aGUgZ3JvdW5kcyB0aGF0ICJzaXplIG9mIHN0YXRlIiBpcyBvbmx5CnVzZWQgYXMgYW4gYXJndW1lbnQgZm9yIGJpZy1PIGNvbXBsZXhpdHkgbm90YXRpb24sIHRodXMKY29uc3RhbnQgZmFjdG9ycyBhbmQgYWRkaXRpb25zIGRvbid0IGNvdW50LgpdPC9pPjwvcD4KCjxwPjxpPlsKQmVybGluOiBOMTkzMiBhZG9wdHMgdGhlIHByb3Bvc2VkIE5BRC4KXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjUxNCI+PGgzPjUxNC4mbmJzcDtTaXplIG9mIHN0YXRlIGZvciBzdWJ0cmFjdF93aXRoX2NhcnJ5PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7VFIxIDUuMS40LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy90cjEuaHRtbCN0ci5yYW5kLmVuZy5zdWIiPiBbdHIucmFuZC5lbmcuc3ViXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtXYWx0ZXIgQnJvd24mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MyBKdWwgMjAwNTwvcD4KPHA+ClBhcmFncmFwaCAyIGJlZ2luczoKPC9wPgo8YmxvY2txdW90ZT4KVGhlIHNpemUgb2YgdGhlIHN0YXRlIGlzIHIuCjwvYmxvY2txdW90ZT4KPHA+Ckhvd2V2ZXIsIHRoZSBuZXh0IHNlbnRlbmNlIHNwZWNpZmllcyBhIHRvdGFsIG9mIHIrMSBpdGVtcyBpbiB0aGUgdGV4dHVhbApyZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RhdGUsICByIHNwZWNpZmljIHjVcyBhcyB3ZWxsIGFzIGEgc3BlY2lmaWMgY2FycnkuClRoaXMgbWFrZXMgYSB0b3RhbCBvZiByKzEgaXRlbXMgdGhhdCBjb25zdGl0dXRlIHRoZSBzaXplIG9mIHRoZSBzdGF0ZSwKcmF0aGVyIHRoYW4gci4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpXZSByZWNvbW1lbmQgdGhlIHNlbnRlbmNlIGJlIGNvcnJlY3RlZCB0byBtYXRjaDoKPC9wPgo8YmxvY2txdW90ZT4KIFRoZSBzaXplIG9mIHRoZSBzdGF0ZSBpcyByKzEuCjwvYmxvY2txdW90ZT4KCjxwPjxpPlsKSmVuczogIEkgcGxlYWQgZm9yICJOQUQiIG9uIHRoZSBncm91bmRzIHRoYXQgInNpemUgb2Ygc3RhdGUiIGlzIG9ubHkKdXNlZCBhcyBhbiBhcmd1bWVudCBmb3IgYmlnLU8gY29tcGxleGl0eSBub3RhdGlvbiwgdGh1cwpjb25zdGFudCBmYWN0b3JzIGFuZCBhZGRpdGlvbnMgZG9uJ3QgY291bnQuCl08L2k+PC9wPgoKPHA+PGk+WwpCZXJsaW46IE4xOTMyIGFkb3B0cyB0aGUgcHJvcG9zZWQgTkFELgpdPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iNTE2Ij48aDM+NTE2LiZuYnNwO1NlZWRpbmcgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSB1c2luZyBhIGdlbmVyYXRvcjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwO1RSMSA1LjEuNC40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvdHIxLmh0bWwjdHIucmFuZC5lbmcuc3ViMSI+IFt0ci5yYW5kLmVuZy5zdWIxXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtXYWx0ZXIgQnJvd24mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MyBKdWwgMjAwNTwvcD4KPHA+ClBhcmFncmFwaCA2IHNheXM6CjwvcD4KPGJsb2NrcXVvdGU+Ci4uLiBvYnRhaW5lZCBieSBzdWNjZXNzaXZlIGludm9jYXRpb25zIG9mIGcsIC4uLiAKPC9ibG9ja3F1b3RlPgo8cD4KV2UgcmVjb21tZW5kIGluc3RlYWQ6CjwvcD4KPGJsb2NrcXVvdGU+Ci4uLiBvYnRhaW5lZCBieSB0YWtpbmcgc3VjY2Vzc2l2ZSBpbnZvY2F0aW9ucyBvZiBnIG1vZCAyKiozMiwgLi4uCjwvYmxvY2txdW90ZT4KPHA+CmFzIHRoZSBjb250ZXh0IHNlZW1zIHRvIHJlcXVpcmUgb25seSAzMi1iaXQgcXVhbnRpdGllcyBiZSB1c2VkIGhlcmUuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQmVybGluOiBOMTkzMiBhZG9wdHMgdGhlIHByb3Bvc2VkIHJlc3VsdGlvbjogc2VlIDI2LjMuMy40LzcuICBNb3ZlZCB0byBSZWFkeS4KPC9wPgoKPHA+PGk+WwpQb3J0bGFuZDogIFN1YnN1bWVkIGJ5IE4yMTExLgpdPC9pPjwvcD4KPGhyPgo8YSBuYW1lPSI1MTciPjxoMz41MTcuJm5ic3A7U2hvdWxkIGluY2x1ZGUgbmFtZSBpbiBleHRlcm5hbCByZXByZXNlbnRhdGlvbjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwO1RSMSA1LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3RyMS5odG1sI3RyLnJhbmQucmVxIj4gW3RyLnJhbmQucmVxXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtXYWx0ZXIgQnJvd24mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MyBKdWwgMjAwNTwvcD4KPHA+ClRoZSBsYXN0IHR3byByb3dzIG9mIFRhYmxlIDE2IGRlYWwgd2l0aCB0aGUgaS9vIHJlcXVpcmVtZW50cyBvZiBhbiBlbmdpbmUsCnNwZWNpZnlpbmcgdGhhdCB0aGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiBhbiBlbmdpbmXVcyBzdGF0ZSwKYXBwcm9wcmlhdGVseSBmb3JtYXR0ZWQsIGNvbnN0aXR1dGUgdGhlIGVuZ2luZdVzICBleHRlcm5hbCByZXByZXNlbnRhdGlvbi4KPC9wPgo8cD4KVGhpcyBzZWVtcyBhZGVxdWF0ZSB3aGVuIGFuIGVuZ2luZdVzIHR5cGUgaXMga25vd24uICBIb3dldmVyLCBpdCBzZWVtcwppbmFkZXF1YXRlIGluIHRoZSAgY29udGV4dCBvZiBnZW5lcmljIGNvZGUsIHdoZXJlIGl0IGJlY29tZXMgdXNlZnVsIGFuZApwZXJoYXBzIGV2ZW4gbmVjZXNzYXJ5IHRvIGRldGVybWluZSBhbiBlbmdpbmXVcyB0eXBlIHZpYSBpbnB1dC4KPC9wPgo8cD4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpXZSB0aGVyZWZvcmUgcmVjb21tZW5kIHRoYXQsIGluIGVhY2ggb2YgdGhlc2UgdHdvIHJvd3Mgb2YgVGFibGUgMTYsIHRoZQp0ZXh0ICJ0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIiBiZSBleHBhbmRlZCBzbyBhcyB0byByZWFkICJlbmdpbmUgbmFtZQpmb2xsb3dlZCBieSB0aGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbi4iCjwvcD4KCjxwPjxpPlsKQmVybGluOiBOMTkzMiBjb25zaWRlcnMgdGhpcyBOQUQuIFRoaXMgaXMgYSBRT0kgaXNzdWUuCl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSI1NDQiPjxoMz41NDQuJm5ic3A7bWlub3IgTlVMTCBwcm9ibGVtcyBpbiBDLjI8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDtDLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9kaWZmLmh0bWwjZGlmZi5saWJyYXJ5Ij4gW2RpZmYubGlicmFyeV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjTkFEIj5OQUQ8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI1IE5vdiAyMDA1PC9wPgo8cD4KQWNjb3JkaW5nIHRvIEMuMi4yLjMsIHAxLCAidGhlIG1hY3JvIE5VTEwsIGRlZmluZWQgaW4gYW55IG9mICZsdDtjbG9jYWxlJmd0OywKJmx0O2NzdGRkZWYmZ3Q7LCAmbHQ7Y3N0ZGlvJmd0OywgJmx0O2NzdGRsaWImZ3Q7LCAmbHQ7Y3N0cmluZyZndDssICZsdDtjdGltZSZndDssCm9yICZsdDtjd2NoYXImZ3Q7LiIgVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIEMgc3RhbmRhcmQuCjwvcD4KPHA+Ckhvd2V2ZXIsIFRhYmxlIDk1IGluIEMuMiBmYWlscyB0byBtZW50aW9uICZsdDtjbG9jYWxlJmd0OyBhbmQgJmx0O2NzdGRsaWImZ3Q7Lgo8L3A+CjxwPgpJbiBhZGRpdGlvbiwgQy4yLCBwMiBjbGFpbXMgdGhhdCAiVGhlIEMrKyBTdGFuZGFyZCBsaWJyYXJ5IHByb3ZpZGVzCjU0IHN0YW5kYXJkIG1hY3JvcyBmcm9tIHRoZSBDIGxpYnJhcnksIGFzIHNob3duIGluIFRhYmxlIDk1LiIgV2hpbGUKdGFibGUgOTUgZG9lcyBoYXZlIDU0IGVudHJpZXMsIHNpbmNlIGEgY291cGxlIG9mIHRoZW0gKGluY2x1ZGluZyB0aGUKTlVMTCBtYWNybykgYXJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSwgdGhlIGFjdHVhbCBudW1iZXIgb2YgbWFjcm9zCmRlZmluZWQgYnkgdGhlIEMrKyBTdGFuZGFyZCBMaWJyYXJ5IG1heSBub3QgYmUgNTQuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSSBwcm9wb3NlIHdlIGFkZCAmbHQ7Y2xvY2FsZSZndDsgYW5kICZsdDtjc3RkbGliJmd0OyB0byBUYWJsZSA5NiBhbmQgcmVtb3ZlIHRoZQpudW1iZXIgb2YgbWFjcm9zIGZyb20gQy4yLCBwMiBhbmQgcmV3b3JkIHRoZSBzZW50ZW5jZSBhcyBmb2xsb3dzOgo8L3A+CjxibG9ja3F1b3RlPgpUaGUgQysrIFN0YW5kYXJkIGxpYnJhcnkgPGRlbD5wcm92aWRlcyA1NCBzdGFuZGFyZCBtYWNyb3MgZnJvbTwvZGVsPgo8aW5zPmRlZmluZXMgYSBudW1iZXIgbWFjcm9zIGNvcnJlc3BvbmRpbmcgdG8gdGhvc2UgZGVmaW5lZCBieTwvaW5zPiB0aGUgQyAKPGlucz5TdGFuZGFyZDwvaW5zPiBsaWJyYXJ5LCBhcyBzaG93biBpbiBUYWJsZSA5Ni4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+WwpQb3J0bGFuZDogIFJlc29sdXRpb24gaXMgY29uc2lkZXJlZCBlZGl0b3JpYWwuICBJdCB3aWxsIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBXRC4KXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjU0OSI+PGgzPjU0OS4mbmJzcDtVbmRlZmluZWQgdmFyaWFibGUgaW4gYmlub21pYWxfZGlzdHJpYnV0aW9uPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7VFIxIDUuMS43LjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy90cjEuaHRtbCN0ci5yYW5kLmRpc3QuYmluIj4gW3RyLnJhbmQuZGlzdC5iaW5dPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxMCBKYW4gMjAwNjwvcD4KPHA+ClBhcmFncmFwaCAxIHNheXMgdGhhdCAiQSBiaW5vbWlhbCBkaXN0cmlidXRvbiByYW5kb20gZGlzdHJpYnV0aW9uIHByb2R1Y2VzCmludGVnZXIgdmFsdWVzIGkmZ3Q7MCB3aXRoIHAoaSkgPSAobiBjaG9vc2UgaSkgKiBwKmkgKiAoMS1wKV4odC1pKSwgd2hlcmUgdCBhbmQKcCBhcmUgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gT0ssIHRoYXQgdGVsbHMgdXMgd2hhdCB0LCBwLCBhbmQgaQphcmUuIFdoYXQncyBuPwo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkJlcmxpbjogVHlwbzogIm4iIHJlcGxhY2VkIGJ5ICJ0IiBpbiBOMTkzMjogc2VlIDI2LjMuNy4yLjIvMS4KPC9wPgoKPHA+PGk+WwpQb3J0bGFuZDogIFN1YnN1bWVkIGJ5IE4yMTExLgpdPC9pPjwvcD4KPGhyPgo8YSBuYW1lPSI1NTQiPjxoMz41NTQuJm5ic3A7UHJvYmxlbSB3aXRoIGx3ZyBEUiAxODQgbnVtZXJpY19saW1pdHMmbHQ7Ym9vbCZndDs8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxOC4yLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLm51bWVyaWMuc3BlY2lhbCI+IFtsaWIubnVtZXJpYy5zcGVjaWFsXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtIb3dhcmQgSGlubmFudCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBKYW4gMjAwNjwvcD4KPHA+CkkgYmVsaWV2ZSB3ZSBoYXZlIGEgYnVnIGluIHRoZSByZXNvbHV0aW9uIG9mOgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTg0Ij5sd2cgMTg0PC9hPgooV1Agc3RhdHVzKS4KPC9wPgoKPHA+ClRoZSByZXNvbHV0aW9uIHNwZWxscyBvdXQgZWFjaCBtZW1iZXIgb2YgPHR0Pm51bWVyaWNfbGltaXRzJmx0O2Jvb2wmZ3Q7PC90dD4uClRoZSBwYXJ0IEknbSBoYXZpbmcgYSBsaXR0bGUgdHJvdWJsZSB3aXRoIGlzOgo8L3A+CjxibG9ja3F1b3RlPjxwcmU+c3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+ClNob3VsZCB0aGlzIG5vdCBiZSBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkPyAgR2l2ZW46CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+aW50IG1haW4oKQp7CiAgICAgYm9vbCBiMSA9IHRydWU7CiAgICAgYm9vbCBiMiA9IGZhbHNlOwogICAgIGJvb2wgYjMgPSBiMS9iMjsKfQo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KSWYgdGhpcyBjYXVzZXMgYSB0cmFwLCBzaG91bGRuJ3QgPHR0Pm51bWVyaWNfbGltaXRzJmx0O2Jvb2wmZ3Q7Ojp0cmFwczwvdHQ+IGJlCjx0dD50cnVlPC90dD4/CjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIDE4LjIuMS41cDM6CjwvcD4KCjxibG9ja3F1b3RlPgotMy0gVGhlIHNwZWNpYWxpemF0aW9uIGZvciA8dHQ+Ym9vbDwvdHQ+IHNoYWxsIGJlIHByb3ZpZGVkIGFzIGZvbGxvd3M6IAo8YmxvY2txdW90ZT48cHJlPm5hbWVzcGFjZSBzdGQgeyAKICAgdGVtcGxhdGUgJmx0OyZndDsgY2xhc3MgbnVtZXJpY19saW1pdHMmbHQ7Ym9vbCZndDsgewogICAgICAuLi4KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSA8ZGVsPmZhbHNlPC9kZWw+IDxpbnM+PGk+aW1wbGVtZW50YXRpb24tZGVmaW5lZDwvaT48L2lucz47CiAgICAgIC4uLgogICB9Owp9CjwvcHJlPjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+WwpSZWRtb25kOiAgTkFEIGJlY2F1c2UgdHJhcHMgcmVmZXJzIHRvIHZhbHVlcywgbm90IG9wZXJhdGlvbnMuICBUaGVyZSBpcyBubyBib29sCnZhbHVlIHRoYXQgd2lsbCB0cmFwLgpdPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iNTU1Ij48aDM+NTU1LiZuYnNwO1RSMSwgOC4yMS8xOiB0eXBvPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7VFIxIDguMjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy90cjEuaHRtbCN0ci5jOTkuYm9vbGgiPiBbdHIuYzk5LmJvb2xoXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNOQUQiPk5BRDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtQYW9sbyBDYXJsaW5pJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIgRmViIDIwMDY8L3A+CjxwPgpUaGlzIG9uZSwgaWYgbm9ib2R5IG5vdGljZWQgaXQgeWV0LCBzZWVtcyByZWFsbHkgZWRpdG9yaWFsOgpzL2NzdGJvb2wvY3N0ZGJvb2wvCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIDguMjFwMToKPC9wPgo8YmxvY2txdW90ZT4KLTEtIFRoZSBoZWFkZXIgYmVoYXZlcyBhcyBpZiBpdCBkZWZpbmVzIHRoZSBhZGRpdGlvbmFsIG1hY3JvIGRlZmluZWQgaW4KPHR0PiZsdDtjc3Q8aW5zPmQ8L2lucz5ib29sJmd0OzwvdHQ+IGJ5IGluY2x1ZGluZyB0aGUgaGVhZGVyIDx0dD4mbHQ7Y3N0ZGJvb2wmZ3Q7PC90dD4uCjwvYmxvY2txdW90ZT4KCjxwPjxpPlsKUmVkbW9uZDogIEVkaXRvcmlhbC4KXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjU1OCI+PGgzPjU1OC4mbmJzcDtsaWIuaW5wdXQuaXRlcmF0b3JzIERlZmVjdDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI0LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaW5wdXQuaXRlcmF0b3JzIj4gW2xpYi5pbnB1dC5pdGVyYXRvcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI05BRCI+TkFEPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RhdmlkIEFicmFoYW1zJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzkgRmViIDIwMDY8L3A+CjxibG9ja3F1b3RlPgo8cD4KICAyNC4xLjEgSW5wdXQgaXRlcmF0b3JzIFtsaWIuaW5wdXQuaXRlcmF0b3JzXQo8L3A+CjxwPgogIDEgQSBjbGFzcyBvciBhIGJ1aWx0LWluIHR5cGUgWCBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50cyBvZiBhbgogIGlucHV0IGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgdHlwZSBUIGlmIHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbnMgYXJlCiAgdmFsaWQsIHdoZXJlIFUgaXMgdGhlIHR5cGUgb2YgYW55IHNwZWNpZmllZCBtZW1iZXIgb2YgdHlwZSBULCBhcwogIHNob3duIGluIFRhYmxlIDczLgo8L3A+CjwvYmxvY2txdW90ZT4KPHA+ClRoZXJlIGlzIG5vIGNhcGl0YWwgVSB1c2VkIGluIHRhYmxlIDczLiAgVGhlcmUgaXMgYSBsb3dlcmNhc2UgdSwgYnV0CnRoYXQgaXMgY2xlYXJseSBub3QgbWVhbnQgdG8gZGVub3RlIGEgbWVtYmVyIG9mIHR5cGUgVC4gIEFsc28sIHRoZXJlJ3MKbm8gZGVzY3JpcHRpb24gaW4gMjQuMS4xIG9mIHdoYXQgbG93ZXJjYXNlIGEgbWVhbnMuICBJTU8gdGhlIGFib3ZlCnNob3VsZCBoYXZlIGJlZW4uLi5IYWgsIGEgYW5kIGIgYXJlIGFscmVhZHkgY292ZXJlZCBpbiAyNC4xLzExLCBzbyBtYXliZSBpdApzaG91bGQgaGF2ZSBqdXN0IGJlZW46CjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIDI0LjEuMXAxOgo8L3A+CjxibG9ja3F1b3RlPgotMS0gQSBjbGFzcyBvciBhIGJ1aWx0LWluIHR5cGUgPHR0Plg8L3R0PiBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50cyBvZiBhbgppbnB1dCBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIHR5cGUgPHR0PlQ8L3R0PiBpZiB0aGUgZm9sbG93aW5nIGV4cHJlc3Npb25zIAphcmUgdmFsaWQ8ZGVsPiwgd2hlcmUgPHR0PlU8L3R0PiBpcyB0aGUgdHlwZSBvZiBhbnkgc3BlY2lmaWVkIG1lbWJlciBvZiB0eXBlCjx0dD5UPC90dD4sPC9kZWw+IGFzIHNob3duIGluIFRhYmxlIDczLgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bClBvcnRsYW5kOiBFZGl0b3JpYWwuCl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSI1NjkiPjxoMz41NjkuJm5ic3A7UG9zdGNvbmRpdGlvbiBmb3IgYmFzaWNfaW9zOjpjbGVhcihpb3N0YXRlKSBpbmNvcnJlY3RseSBzdGF0ZWQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy40LjQuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zdGF0ZS5mbGFncyI+IFtsaWIuaW9zdGF0ZS5mbGFnc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRHVwIj5EdXA8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7U2V1bmdiZW9tIEtpbSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxMCBNYXIgMjAwNjwvcD4KPHA+ClNlY3Rpb246IDI3LjQuNC4zIFtsaWIuaW9zdGF0ZS5mbGFnc10KPC9wPgo8cD4KUGFyYWdyYXBoIDQgc2F5czoKPC9wPgo8YmxvY2txdW90ZT4KPGJsb2NrcXVvdGU+PHByZT52b2lkIGNsZWFyKGlvc3RhdGUgPGk+c3RhdGU8L2k+ID0gZ29vZGJpdCk7CjwvcHJlPjwvYmxvY2txdW90ZT4KPHA+CjxpPlBvc3Rjb25kaXRpb246PC9pPiBJZiA8dHQ+cmRidWYoKSE9MDwvdHQ+IHRoZW4gPHR0PjxpPnN0YXRlPC9pPiA9PSByZHN0YXRlKCk7PC90dD4Kb3RoZXJ3aXNlIDx0dD5yZHN0YXRlKCk9PTxpPnN0YXRlPC9pPnxpb3NfYmFzZTo6YmFkYml0PC90dD4uCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+ClRoZSBwb3N0Y29uZGl0aW9uICJyZHN0YXRlKCk9PXN0YXRlfGlvc19iYXNlOjpiYWRiaXQiIGlzIHBhcnNlZCBhcwoiKHJkc3RhdGUoKT09c3RhdGUpfGlvc19iYXNlOjpiYWRiaXQiLCB3aGljaCBpcyBwcm9iYWJseSB3aGF0IHRoZQpjb21taXR0ZWUgbWVhbnQuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+ClRoaXMgaXMgYSBkdXBsaWNhdGUgb2YgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI3MiI+MjcyPC9hPi4KPC9wPgo8cD4tLS0tLSBFbmQgb2YgZG9jdW1lbnQgLS0tLS08L3A+CjwvYm9keT48L2h0bWw+